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,6
cumprod(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
Reduce
takes 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.R
123R 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)