我有一个数据帧列表x,我想找到数据帧中每个元素的平均值。我在Dimitris Rizopoulos网上礼貌地找到了一个优雅的解决方案。
x.mean = Reduce("+", x) / length(x)
但是,当数据帧包含NA时,这不起作用。有没有一个很好的方法来实现这个目标?
答案 0 :(得分:7)
以下是使用data.table
步骤是(1)将x
中的每个data.frame [element]强制转换为data.table,并使用标识rownames的列(称为rn
)。 (2)在大数据表上,通过rowname计算每列的平均值(na.rm = TRUE
处理NA
值)。 (3)删除rn
列
library(data.table)
results <- rbindlist(lapply(x,data.table, keep.rownames = TRUE))[,
lapply(.SD, mean,na.rm = TRUE),by=rn][,rn := NULL]
另一种选择是强制转换矩阵,“简化”为三维数组,然后在适当的边距上应用均值
# for example
results <- as.data.frame(apply(simplify2array(lapply(x, as.matrix)),1:2,mean, na.rm = TRUE))
答案 1 :(得分:5)
我更喜欢@ mnel的解决方案,但作为一项教育练习,您可以修改表达式以使用NA
值,同时保持相同类型的逻辑:
Reduce(function(y,z) {y[is.na(y)] <- 0; z[is.na(z)] <- 0; y + z}, x) /
Reduce('+', lapply(x, function(y) !is.na(y)))