我想使用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)]
答案 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 answer和this 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 comment和this 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