元素明确表示具有NA的数据帧列表

时间:2013-08-22 03:26:22

标签: r

我有一个数据帧列表x,我想找到数据帧中每个元素的平均值。我在Dimitris Rizopoulos网上礼貌地找到了一个优雅的解决方案。

x.mean = Reduce("+", x) / length(x) 

但是,当数据帧包含NA时,这不起作用。有没有一个很好的方法来实现这个目标?

2 个答案:

答案 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)))