R datatable相关

【个人自用,叙述表达可能不清 存在理解错误可能】
以下均为本人做作业时遇到的各种问题,感谢StackOverflow与男友的倾情相助。各种弱智问题尚在补全中。

1. 合并list中多个的elements

数据集dt如下:

cyl gear
6 4
6 4
6 3
6 3
4 4
8 3
8 2

需要根据某列数值分类,合并其他列出现过的数据。

此处举例为,统计每类cyl分别出现过哪些gear类型,希望达成的结果如下:

cyl gearsL
6 4, 3
4 4
8 3, 2
dt <- unique(dt)
dt[, gearsL := paste0(gear, collapse=", "),  by = cyl]
dt$gear <- NULL

或者更为简洁的,将gearsL赋值为list类型:

dt[, gearsL := .(list(unique(gear))),  by = cyl]

使用function “rbindlist”
usage:
rbindlist(list, use.names=“check”, fill=FALSE, idcol=NULL)

dt.country  <- c("Sweden", "Netherlands", "Germany", "France", 
                 "Italy", "Spain", "United Kingdom", "Poland")
                 
# use rbindlist
dt.covid19 <- rbindlist(json.convid19[dt.country], 
				use.names = T, idcol = "country")
				
# use loops
dt.covid19 <- data.table()
for (country in dt.country){
  dt <- json.convid19[[country]]
  dt$country <- country
  dt.covid19 <- rbind(dt, dt.covid19)
  rm(dt)
}

2. 使用.SD在datatable内选择行
.SD is a data.table containing the Subset of x’s Data for each group, excluding any columns used in by (or keyby).

DT[, .SD, .SDcols=x:y]                 # select columns 'x' and 'y'
DT[, .SD[1]]                           # first row of all columns
DT[, .SD[1], by=x]                     # first row of 'y' and 'v' for each group in 'x'
DT[, c(.N, lapply(.SD, sum)), by=x]    # get rows *and* sum columns 'v' and 'y' by group

# 不同实现方式的同一结果
dt.email <- as.data.table(sapply(dt.email, tolower))   # apply后转化为datatable
dt.enron.email <- dt.email[, lapply(.SD, tolower)]     # 在datatable内完成

根据datatable中的一列数据分组并运算,将结果添加为新的一列
譬如用cyl分类,查看各cyl下gear的平均数值。数据集dt是1中数据集:

dt[, mean := lapply(.SD, mean), by = cyl, .SDcols = "gear"]

返回结果如下:

cyl gear mean
6 4 3.5
6 4 3.5
4 4 4.0
6 3 3.5
8 3 3.0
6 3 3.5

3. 判断datatable中某列是否包含特定文字

# 检查file.name列中是否包含单词spam, 返回T/F
dt.email[, "spam" := grepl("spam", file.name)]

4. 计算给定列和其它各列差值

数据预览如下,希望计算X7和除id外各列的差值
R datatable相关_第1张图片

names <- colnames(dt)[2:11]
for (y in names){
    gn <- paste0("X7", ":", y)
    dt[, (gn) := mapply(function(x) dt$X7-.SD[[y]], y, SIMPLIFY = F)]
}

获得结果如下:
R datatable相关_第2张图片

你可能感兴趣的:(R datatable相关)