我有一个数据帧列表x,我想找到数据帧中每个元素的平均值.我在Dimitris Rizopoulos网上礼貌地找到了一个优雅的解决方案.
x.mean = Reduce("+", x) / length(x)
Run Code Online (Sandbox Code Playgroud)
但是,当数据帧包含NA时,这并不真正起作用.有没有一个很好的方法来实现这一目标?
这是一种使用的方法 data.table
步骤是(1)将每个data.frame [element]强制转换x为data.table,并使用rn标识rownames的列(称为).(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]
Run Code Online (Sandbox Code Playgroud)
另一种方法是强制使用矩阵,"简化"为三维数组,然后在适当的边距上应用均值
# for example
results <- as.data.frame(apply(simplify2array(lapply(x, as.matrix)),1:2,mean, na.rm = TRUE))
Run Code Online (Sandbox Code Playgroud)
我更喜欢@ 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)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
621 次 |
| 最近记录: |