R data.table:许多列的意思

时间:2017-05-05 14:33:36

标签: r data.table

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

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)]

2 个答案:

答案 0 :(得分:9)

使用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

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

答案 1 :(得分:9)

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

excepted answerthis comment 中建议的解决方案都不能完全满足所有这些要求。接受的答案计算 data.table的所有列的方法,并且不会重命名结果。注释中的解决方案确实使用列名称向量并重命名结果,但在the OP expects a new object时修改原始data.table。

使用以下代码可以满足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

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

修改感谢this commentthis answer, 有一种方法可以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