Awesome Website
- Awesome R: A list of awesome R packages and tools
- METACRAN: Search and browse all CRAN/R packages
- RDocumentation: Search all CRAN, BioConductor and Github packages
- R Packages: A comprehensive index of R packages and documentation
- CRAN Task Views
Useful Command
- 搜索某个包下的指定函数:
?proxy::dist - 查看包的帮助手册:
browseVignettes(package = "dplyr") - 读取文件夹下的所有指定类型的文件:
list.files("../data_survey/", pattern="*.xls") - 打开新窗口用于存储新图形:
dev.new() - 查看变量类型:
mode() - 查看变量的种类个数:
table() - 变量 0-1 标准化:
scale() - 删除所有包含 temp 的对象:
rm(list=ls()[grepl('temp',ls())]) - 查看和清空内存:
gc(reset=TRUE) - 分类汇总,根据 position 对 a1\a2\a3 分别求和:
aggregate(datos[,c("a1","a2","a3")], by=list(datos$Position), "sum") - 根据多列取不重复的子集:
df[!duplicated(df[,1:2]),]
Array
- 去除数组两端的 0 值:
x[min(which(x!=0)) : max(which(x!=0))] - 计算一个向量的累积求和或累积求积
cumsum(c(1,2,3))→1,3,6cumprod(c(1,2,3))→1,2,6
- 比较两个向量是否完全相同:identical(vector1, vector2)
- 自动产生向量的下标:
seq_along()
List
- 选择列表的多个元素:
mylist[c(1,3,5)],而双中括号选择的是再下一层 - R 中字典的概念
list(a = 1,b = "foo",c = 1:5)list[['a']]返回 1
Data Frame
- 将 data.frame 的所有 NA 替换为 0:
d[is.na(d)] <- 0 - 更改数据框或矩阵的列名:
colnames(dt)[1] <- "cn" - 去除包含 NA 的行 / 去除某些列包含 NA 的行 / 去除头尾包含 NA 的行12345678dt[complete.cases(dt),]dt[complete.cases(dt[,5:6]),]# 如果一定要用 is.na()dt[rowSums(is.na(dt[,5:6]))==0,]# 去除头尾包含 NA 的行,中间行包含 NA 则不去除df[min(which(complete.cases(df)==1)):max(which(complete.cases(df)==1)) ,]
Factor
- Factor 转换为 numeric
- as.numeric(as.character(factorname))
- as.numeric(levels(factorname)[factorname])
Statistics
- set.seed():是用于产生随机数的,编号设定基本可以随意
- 根据 t 值求 p 值:
p.value = 2*pt(-abs(t.value), df=length(data)-1) - 从模型中抽取 Log-Liklihood 值:
logLik(mylogit) - 抽取模型的拟合值:
fitted() - 创建两个分类的 Dummy:
as.numeric(gear_box=="手自一体") - 计算四分位数间距:
IQR() - 计算百分位数:
quantile(x, probs=c(0.25, 0.75))
Advanced Function
Reduce
Reducetakes a binary function and a list of data items and successively applies the function to the list elements in a recursive fashion. For example:12Reduce(intersect,list(a,b,c))` is the same as `intersect((intersect(a,b),c)Reduce(function(x,y) merge(x,y,by="cust_no"), list(vege_loyal,fruit_loyal,meat_loyal))
Apply Family
- datacamp_tutorial
- apply(x, margin, fun):x is an array or matrix, margin = 1 for row / 2 for column, such as
apply(matrix, 2, sum) - lapply:和 apply 的不同是也可以应用于 dataframes, lists or vectors,并且 return list
lapply(MyList,"[", , 2):从列表的每一个矩阵中选取第二列元素,返回一个向量列表- The
[notation is the select operator - The
[[ ]]notation expresses the fact that the we are dealing with lists
- sapply:和 lapply 类似,但不同是 sapply 返回最基础的数据结构,而不是列表
sapply(MyList,"[", 2, 1 ):选取列表每一个矩阵中的第二行第一列的元素,返回一个向量unlist(lapply(MyList,"[", 2, 1 )):lapply 的结果unlist之后才返回向量
rep(): sapply 返回结果配合 rep 函数使用,比如rep(c(1,4,8),c(3,1,2))返回c(1,1,1,4,4,8)- mapply: applies a Function to Multiple List or multiple Vector Arguments, such as
mapply(rep,1:4,4),相当于rep(c(1,2,3,4),c(4,4,4,4))或者c(rep(1, 4), rep(2, 4), rep(3, 4), rep(4, 4)) - sweep:比如矩阵每一列减去各列均值
data <- sweep(data, 2, data_means,"-"),均值可以先通过 apply 求出
Eval & Assign
Eval()函数可以将字符串转变为变量名- 如果用字符串表示的变量无需被赋值,只是表示变量,则用 eval 函数转换:
var <- eval ( parse ( text = "string" ) )
- 如果用字符串表示的变量无需被赋值,只是表示变量,则用 eval 函数转换:
Assign()函数可以为以字符串命名的变量赋值- 如果用字符串表示的变量是被赋值对象,则使用 assign 函数
assign(paste(str1,str2,sep=""), value)
- 如果用字符串表示的变量是被赋值对象,则使用 assign 函数
DateTime Transfermation
- 将字符串转换为 Date 类型
as.Date('20140325',"%Y%m%d")strptime('2012-09-16 19:35:58',"%Y-%m-%d %H:%M:%S")
lubridate- 获取年份:
year(as.Date('20130204',"%Y%m%d")) - 获取月份:
month(as.Date('20130204',"%Y%m%d")) - 获取周数
- 从1月1日开始计算:
week(as.Date('20130204',"%Y%m%d")) - 从星期一开始计算:
isoweek()
- 从1月1日开始计算:
- 获取该月第几天:
mday(as.Date('20130204',"%Y%m%d")) - 获取该年第几天:
yday(as.Date('20130204',"%Y%m%d"))
- 获取年份:
- 将 Excel 中的数字型日期时间转换为日期
as.Date(41310.11, origin = "1899-12-30")41310 的单位是天as.POSIXct(41310*24*3600, origin = "1899-12-30")POSIXct 函数的单位是秒
- 求两个日期之间的差12difftime(as.Date(as.integer(41310.12), origin = "1899-12-30"), as.Date('20130204',"%Y%m%d"), units='days')as.integer(difftime(max(t1,t2,t3,t4), min(t1,t2,t3,t4), units="mins"))
Time Series
- 获取时间序列的日期:
as.Date(time(ts)) - 获取时间序列的起止时间:
start(ts) end(ts),返回的都是 numeric 数组,通过下标获取年月 - 根据起始时间产生连续的时间
seq.Date,然后创建 zoo 对象
|
|
String Processing
|
|
Set Operation
a <- c("b", "c", "d", "e") b <- c("d", "e", "f", "g")- 交集:intersect(a,b) = d,e
- 并集:union(a,b) = b,c,d,e,f,g
- 差集:setdiff(a,b) = b,c / setdiff(b,a) = f,g
R Packages
require()和library()最大的不同是前者返回一个 Logical Value,如果包不存在则继续运行1234if (!require("abc", character.only=T, quietly=T)) {install.packages("abc")library("abc, character.only=T)}
Data Manipulation & Input & Output
- Excel File
- openxlsx:
data <- read.xlsx("abc.xlsx", sheet = 1, startRow = 2, colNames = TRUE)只能读取 .xlsx - XLConnect:
wb = loadWorkbook("../data_survey/A1.xls")df = readWorksheet(wb, sheet = "Sheet1", startRow = 2, header = FALSE)
- openxlsx:
- tidyr
gather():将除了 iteration 的所有列转变为 key-value 的形式:recall <- gather(recall_i, key='keyname', value='valuename', -iteration)spread():将 key:value 的形式重新转变为 column 的形式spread(recall,key,value)seperate():将一列通过分隔符分拆为多列unite():多列合并为一列
- dplyr
window():比如截取时间序列window(ts, start=c(1949, 1), end=c(1959,12))- Ranking functions:
min_rank() percent_rank() dense_rank() lead()&lag():不同包的 lag 函数用法不同,必须指定dplyr::lag(ts,1)
- sqldf:
df <- sqldf('select * from dataframe') - texreg:Conversion of R Regression Output to LaTeX or HTML Tables
- stargazer:Well-Formatted Regression and Summary Statistics Tables
- formatR: Format R Code Automatically、Introduction
- gridExtra:
grid.table()将表格输出为图片
Big Data & Optimization
- optim:How to use optim() in R
- Rcpp: High Performance Functions with Rcpp
- data.table
- Getting Started_Github Tutorial , 中文教程
- data.table 的计算语法规则:`DT[i, j, by] 使用 i 来 subset 行,然后计算 j ,最后用 by 分组
|
|
Time Series
- kernlab:Gaussian Process Regression
- bsts: Baayesian Structural Time Series
- tseries: Time Series Analysis and Computational Finance
- fUnitRoots: Trends and Unit Roots
- urca: Unit root and cointegration tests for time series data
- forecast: Forecasting Functions for Time Series and Linear Models
|
|
- WaveletComp:小波分析和时间序列重构,Wavelet analysis and reconstruction of time series, cross-wavelets and phase-difference (with filtering options), significance with simulation algorithms.
Algorithm & Modeling
- lmtest: Testing Linear Regression Models
RStudio
Shortcut Key in RStudio
- Clear console:
Ctrl + L - Insert a chunk in Rmd:
Ctrl + Alt + I - Add comment:
Ctrl + Shift + C
R markdown
|
|
- Cheet Sheet
- 生成 HTML 时,如果找不到对象,先
load(file=".RData") - 屏蔽代码提示和警告信息:
{r message=FALSE, warning=FALSE}
Others
Run R in CentOS
-
123sudo yum install -y epel-releasesudo yum update -ysudo yum install -y R
运行 R 脚本并输出信息到终端:
Rscript a.R运行 R 脚本并输出到文件(默认 a.Rout):
R CMD BATCH a.R123R CMD BATCH a.R# Check the outputcat a.Rout断开终端后离线运行 R 脚本
- 安装 screen:
yum install screen - 新建一个会话:
screen -S lnmp(lnmp为会话名,可自己定义) - 离开会话并让程序继续运行:
ctrl a d(按住ctrl不放,分别按 a 和 d) - 恢复后台运行的会话:
screen -r lnmp(lnmp为自己定义的会话名) - 显示所有screen创建的会话:
screen -ls - 在会话里执行
exit命令会话是结束运行并退到 shell 中
- 安装 screen:
也可以使用
nohup命令:nohup R CMD BATCH wenjian.R wenjian.out
Project Management
- Get data out of R: 1 2
- 从另一个 R Project 中读取对象的方法:
- 先保存一个项目中的对象:
saveRDS(df, file="mytweets.rds") - 再到另一个项目中读取:
df2 <- readRDS("mytweets.rds")
- 先保存一个项目中的对象:
- getwd(): 查看当前工作目录
- ls(): 列出所有对象的名字
- ls.str(): 列出所有对象的详细信息
- save.image(): 保存工程!
Update R
- 所有包均安装在 R 安装路径的 Library 目录中,直接拷贝转移即可!
- 当然,也可以通过下列命令恢复已安装的包
- 启动当前版本,输入以下命令
- oldip <- installed.packages()[,1]
- save(oldip, file=”installedPackages.Rdata”)
- 卸载旧版本
- 下载安装新版本,启动新版本输入以下命令
- load(“installedPackages.Rdata”)
- newip <- installed.packages()[,1]
- for(i in setdiff(oldip, newip)) install.packages(i)
