【问题标题】:Computing summary statistics individually from values in each cell in a data frame in a list根据列表中数据框中每个单元格中的值单独计算汇总统计信息
【发布时间】:2017-12-01 21:07:42
【问题描述】:

我有 25 个像这样的列表形式的数据框(此处显示三个,三个足以用于示例计算):

df1 <- data.frame(c(1, 3, 2, 4, 2, 2,4), c(4, 5, 2, 5, 6, 3, 2))
df2 <- data.frame(c(4, 2, 5, 2, 5, 2, 6), c(6, 3, 2, 6, 2, 6, 3))
df3 <- data.frame(c(1, 3, 2, 4, 2, 2,4), c(4, 5, 2, 5, 6, 3, 2))
list <- list(df1, df2, df3)

我想制作另一个数据框,其中包含每个单元格中的平均值,然后我想要标准偏差。因此它将是一个 4 列乘 7 行的数据框,其中包含数据框中每个单元格的平均值和标准差。

如何做到这一点?我的数据也有超过 7 行。

【问题讨论】:

  • 包含此输入的所需输出会很有帮助,以便验证可能的解决方案。

标签: r


【解决方案1】:

我承认我对 d.b 的回答印象深刻,但我认为将您的列表转换为 3d 数组可能会更好地解决这个问题。

library(abind)

a <- abind(mylist, along = 3)
a <- apply(a, c(1,2), function(i) abind(c(mean(i), sd(i)), along = 2))

data.frame(t(rbind(a[, , 1], a[, , 2])))

结果

      X1        X2       X3        X4
2.000000 1.5491933 4.666667 1.0327956
2.666667 0.5163978 4.333333 1.0327956
3.000000 1.5491933 2.000000 0.0000000
3.333333 1.0327956 5.333333 0.5163978
3.000000 1.5491933 4.666667 2.0655911
2.000000 0.0000000 4.000000 1.5491933
4.666667 1.0327956 2.333333 0.5163978

【讨论】:

    【解决方案2】:
    mylist <- list(df1, df2, df3)
    do.call(cbind, lapply(lapply(1:2, function(i) sapply(mylist, function(x) x[,i])),
                          function(a) t(apply(a, 1, function(x) c(mean(x), sd(x))))))
    #         [,1]      [,2]     [,3]      [,4]
    #[1,] 2.000000 1.7320508 4.666667 1.1547005
    #[2,] 2.666667 0.5773503 4.333333 1.1547005
    #[3,] 3.000000 1.7320508 2.000000 0.0000000
    #[4,] 3.333333 1.1547005 5.333333 0.5773503
    #[5,] 3.000000 1.7320508 4.666667 2.3094011
    #[6,] 2.000000 0.0000000 4.000000 1.7320508
    #[7,] 4.666667 1.1547005 2.333333 0.5773503
    

    【讨论】:

      猜你喜欢
      • 2014-04-09
      • 2019-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多