R代码|data.table包使用示例
专题介绍:R是一种广泛用于数据分析和统计计算的强大语言,于上世纪90年代开始发展起来。得益于全世界众多 爱好者的无尽努力,大家继而开发出了一种基于R但优于R基本文本编辑器的R Studio(用户的界面体验更好)。也正是由于全世界越来越多的数据科学社区和用户对R包的慷慨贡献,让R语言在全球范围内越来越流行。其中一些R包,例如MASS,SparkR, ggplot2,使数据操作,可视化和计算功能越来越强大。R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。R作为一种统计分析软件,是集统计分析与图形显示于一体的。它可以运行于UNIX、Windows和Macintosh的操作系统上,而且嵌入了一个非常方便实用的帮助系统,相比于其他统计分析软件,R的学术性开发比较早,适合生物学和医学等学术学科的科研人员使用。
前言
我创建【R代码】专栏,用于分享R语言解决数据,特征和模型三方面问题的代码。这些代码片段,具有实用性和迁移性。大家可以根据实际问题做修改,变通和延展。我只是R语言代码的搬运工和传播者,大家在使用这些R代码的时候,有些什么新的启示或者问题,请留言。依托【R语言】公众号,我创建了R语言群,群友们每天都会就R语言的主题进行交流和分享。需要加入R语言群的朋友,可以扫码加我的个人微信,请备注【姓名-入群】。我诚邀你加入群,大家相互学习和共同进步。
代码
在上一篇文章《R代码|dplyr包使用示例》留言里,一位朋友提到了data.table包。这篇文章分享一些data.table包的使用例子,涉及到数据的导入和数据的加工(增删改查和统计操作)。
#################################
#时间:2020-07-29
################################
options(warn = -1)
# 加载data.table包
library(data.table)
# 数据导入
mt <- fread("https://raw.githubusercontent.com/selva86/datasets/master/mtcars.csv")
head(mt)
class(mt)
# 数据读取性能对比分析
# Create a large .csv file
set.seed(100)
m <- data.frame(matrix(runif(10000000), nrow=1000000))
write.csv(m, 'm2.csv', row.names = F)
# Time taken by read.csv to import
system.time({m_df <- read.csv('m2.csv')})
# Time taken by fread to import
system.time({m_dt <- fread('m2.csv')})
# data.frame转换为data.table
data("mtcars")
head(mtcars)
mtcars$carname <- rownames(mtcars)
mtcars_dt <- as.data.table(mtcars)
class(mtcars_dt)
mtcars_copy <- copy(mtcars)
setDT(mtcars_copy)
class(mtcars_copy)
# data.frame转换为data.table
setDF(mtcars_copy)
class(mtcars_copy)
# 数据选择操作
# dataframe syntax
mtcars[mtcars$cyl == 6 & mtcars$gear == 4, ]
# datatable syntax
mtcars_dt[cyl==6 & gear==4, ]
mtcars[, 1]
mtcars_dt[, 1]
mtcars_dt[, 1, with=F]
mtcars_dt[, mpg]
myvar <- "mpg"
mtcars_dt[, myvar, with=F]
columns <- c('mpg', 'cyl', 'disp')
mtcars_dt[, columns]
mtcars_dt[, columns, with=FALSE]
# syntax 1:
mtcars_dt[1:4, list(mpg, cyl, gear)]
# syntax 2: most used
mtcars_dt[, .(mpg, cyl, gear)]
# 删除列
drop_cols <- c("mpg", "cyl", "gear")
mtcars_dt[, !drop_cols, with=FALSE]
# 列名重新命名
setnames(mtcars_dt, 'vs', 'engine_type')
colnames(mtcars_dt)
DT <- data.table(A=1:5)
DT[ , X := shift(A, 1, type="lag")]
DT[ , Y := shift(A, 1, type="lead")]
# Solution 1
aq_dt <- data.table(airquality)
aq_dt[!is.na(Ozone), .(Solar.R, Wind, Temp)]
# Solution 2
setDT(airquality)
airquality[!is.na(Ozone), .(Solar.R, Wind, Temp)]
# 增加新的列
# data.frame syntax (works on data.table)
mtcars_dt$cyl_gear <- mtcars_dt$cyl + mtcars_dt$gear
# data.table syntax
mtcars_dt[, cyl_gear2 := cyl + gear]
mtcars_dt[, `:=`(cyl_gear3 = cyl * gear,
cyl_gear4 = cyl - gear)]
mtcars_dt
mtcars_dt[, .(cyl_gear3 = cyl * gear,
cyl_gear4 = cyl - gear)]
# 分组操作
mtcars_dt[, .(mean_mileage=mean(mpg)), by=.(cyl, gear)]
mtcars_dt[, .N, by=cyl]
dt1 <- mtcars_dt[, .(mean_mpg=mean(mpg),
mean_disp=mean(disp),
mean_wt=mean(wt),
mean_qsec=mean(qsec)), by=cyl]
output <- dt1[order(cyl), ]
output
output <- mtcars_dt[, .(mean_mpg=mean(mpg),
mean_disp=mean(disp),
mean_wt=mean(wt),
mean_qsec=mean(qsec)), by=cyl][order(cyl), ]
# data.table中使用函数
output <- mtcars_dt[, lapply(.SD, mean), by=cyl, .SDcols=c("mpg", "disp", "hp", "drat", "wt", "qsec")]
output
# 数据连接
dt1 <- mtcars_dt[5:25,.(carname, mpg, cyl)]
dt2 <- mtcars_dt[1:10, .(carname, gear)]
dt3 <- mtcars_dt[2:12, .(carname, disp)]
# Inner Join
merge(dt1, dt2, by='carname')
#> <returns 6 rows>
# Left Join
merge(dt1, dt2, by='carname', all.x = T)
#> <returns 21 rows>
# Outer Join
merge(dt1, dt2, by='carname', all = T)
#> <returns 25 rows>
# 参考资料
# https://www.machinelearningplus.com/data-manipulation/datatable-in-r-complete-guide/
温馨提示:
第一步:运行一遍代码,理解data.table包函数的使用,不明白的地方,查看函数的帮助文档。
第二步:迁移到自己的数据集,进行应用。
代码的使用,有什么问题,请留言。
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!