前言
我创建【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 "https://raw.githubusercontent.com/selva86/datasets/master/mtcars.csv")
head(mt)
class(mt)
# 数据读取性能对比分析
# Create a large .csv file
set.seed(100)
m write.csv(m, 'm2.csv', row.names = F)
# Time taken by read.csv to import
system.time({m_df 'm2.csv')})
# Time taken by fread to import
system.time({m_dt 'm2.csv')})
# data.frame转换为data.table
data("mtcars")
head(mtcars)
mtcars$carname mtcars_dt class(mtcars_dt)
mtcars_copy 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 '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 "mpg", "cyl", "gear")
mtcars_dt[, !drop_cols, with=FALSE]
# 列名重新命名
setnames(mtcars_dt, 'vs', 'engine_type')
colnames(mtcars_dt)
DT DT[ , X := shift(A, 1, type="lag")]
DT[ , Y := shift(A, 1, type="lead")]
# Solution 1
aq_dt 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 $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 mean_disp=mean(disp),
mean_wt=mean(wt),
mean_qsec=mean(qsec)), by=cyl]
output output
output mean_disp=mean(disp),
mean_wt=mean(wt),
mean_qsec=mean(qsec)), by=cyl][order(cyl), ]
# data.table中使用函数
output "mpg", "disp", "hp", "drat", "wt", "qsec")]
output
# 数据连接
dt1 dt2 dt3 # Inner Join
merge(dt1, dt2, by='carname')
#>
# Left Join
merge(dt1, dt2, by='carname', all.x = T)
#>
# Outer Join
merge(dt1, dt2, by='carname', all = T)
#>
# 参考资料
# https://www.machinelearningplus.com/data-manipulation/datatable-in-r-complete-guide/
温馨提示:
第一步:运行一遍代码,理解data.table包函数的使用,不明白的地方,查看函数的帮助文档。
第二步:迁移到自己的数据集,进行应用。
代码的使用,有什么问题,请留言。