R data.table:许多列的意思

Bio*_*roo 8 r data.table

我想使用data.tableR来计算另一组列的许多列的列方式.我知道如何为几列做这个,我在下面提供一个例子.但是,在我的非玩具示例中,我有几十个变量我想这样做,我想找到一种方法从列名称的向量中执行此操作.这可能吗?

library(data.table)

# creates data table
dfo <- data.frame(bananas = 1:5, 
             melonas = 6:10,
             yeah = 11:15,
             its = c(1,1,1,2,2)
             )
dto <- data.table(dfo)

# gets column means by 'its' column
dto[,
.('bananas_mean' = mean(bananas),
  'melonas_mean' = mean(melonas),
  'yeah_mean' = mean(yeah)
  ),
by = .(its)]
Run Code Online (Sandbox Code Playgroud)

Uwe*_*Uwe 12

OP已经请求从列名称的向量计算许多列的列均值.此外,OP在他的示例代码中已经证明他想要重命名结果列.

本评论中建议的例外答案和解决方案都不能完全满足所有这些要求.接受的答案计算data.table的所有列的均值,并且不重命名结果.注释中的解决方案确实使用列名称向量并重命名结果,但修改原始data.table,而OP期望新对象.

使用以下代码可以满足OP的要求:

# define columns to compute mean of
cols <- c("bananas", "melonas")
# compute means for selected columns and rename the output
result <- dto[, lapply(.SD, mean), .SDcols = cols, by = its
              ][, setnames(.SD, cols, paste(cols, "mean", sep = "_"))]

result
#   its bananas_mean melonas_mean
#1:   1          2.0          7.0
#2:   2          4.5          9.5
Run Code Online (Sandbox Code Playgroud)

仅为列名称的字符向量给出的列计算平均值,输出列已重命名,并且 dto未更改.

编辑感谢这个评论这个答案,有一种方法可以自动data.table重命名输出列:

result <- dto[, sapply(.SD, function(x) list(mean = mean(x))), .SDcols = cols, by = its]
result
#   its bananas.mean melonas.mean
#1:   1          2.0          7.0
#2:   2          4.5          9.5
Run Code Online (Sandbox Code Playgroud)


COL*_*OLO 10

使用data.table:

library(data.table)
d <- dto[, lapply(.SD, mean), by=its]

d

   its bananas melonas yeah
1:   1     2.0     7.0 12.0
2:   2     4.5     9.5 14.5
Run Code Online (Sandbox Code Playgroud)

显然,可以使用和组合其他功能.希望能帮助到你.