【问题标题】:Is there a way to calculate standard deviation for each cell across multiple data frames in R?有没有办法计算 R 中多个数据帧中每个单元格的标准偏差?
【发布时间】:2021-09-01 05:11:10
【问题描述】:

我目前有一个包含多个相似尺寸数据框的列表。

  • 数据框中的每个单元格对应一个唯一样本的读数
  • 每个数据帧都是对相同数据的复制读取
a <- data.frame(matrix(sample(20,10), ncol = 5, nrow = 5))
b <- data.frame(matrix(sample(20,10), ncol = 5, nrow = 5))
c <- data.frame(matrix(sample(20,10), ncol = 5, nrow = 5))
 
> a
  X1 X2 X3 X4 X5
1 15  2 15  2 15
2 19  6 19  6 19
3 14 11 14 11 14
4  3  5  3  5  3
5 10  4 10  4 10
> b
  X1 X2 X3 X4 X5
1 14 10 14 10 14
2  5  7  5  7  5
3  9 15  9 15  9
4  3 18  3 18  3
5  8 17  8 17  8
> c
  X1 X2 X3 X4 X5
1  4  5  4  5  4
2 14 12 14 12 14
3 17 10 17 10 17
4 11 16 11 16 11
5  7  9  7  9  7

sampledData <- list(a, b, c)

理想情况下,代码将应用于创建的列表,最终目标是输出相似维度的数据帧,每个单元格包含列表中所有数据帧中相同位置的所有单元格的数据的标准偏差。

【问题讨论】:

  • 如果在创建a/b/c之前使用set.seed(123),每次都会得到相同的结果。这通常很好,这样结果可以被潜在的回答者复制。
  • @thelatemail,当然!我会注意到以后的任何帖子都包含 set.seed() 部分以确保可重复性。

标签: r


【解决方案1】:

化简为一个数组,然后在每组数据的每一行/每列位置得到sd

data.frame(apply(sapply(sampledData, as.matrix, simplify="array"), c(1,2), sd))

【讨论】:

  • 谢谢你!一个班轮的简单性绝对是一个优点:)
【解决方案2】:

这是一种使用两个循环的方法 -

res <- sampledData[[1]]

for(i in seq(nrow(res))) {
  for(j in seq(ncol(res))) {
    res[i, j] <- sd(sapply(sampledData, function(x) x[i, j]))
  }
}
res

#        X1       X2       X3       X4       X5
#1 5.567764 7.000000 5.567764 7.000000 5.567764
#2 4.932883 8.544004 4.932883 8.544004 4.932883
#3 3.785939 9.291573 3.785939 9.291573 3.785939
#4 8.504901 4.582576 8.504901 4.582576 8.504901
#5 3.511885 7.371115 3.511885 7.371115 3.511885

数据

set.seed(2021)
a <- data.frame(matrix(sample(20,10), ncol = 5, nrow = 5))
b <- data.frame(matrix(sample(20,10), ncol = 5, nrow = 5))
c <- data.frame(matrix(sample(20,10), ncol = 5, nrow = 5))
sampledData <- list(a, b, c)

【讨论】:

  • 感谢您抽出宝贵时间回答!我最初也倾向于使用 for 循环,但不完全确定如何进行。感谢您举例说明实施此类解决方案背后的逻辑。
猜你喜欢
  • 2021-10-16
  • 1970-01-01
  • 2021-08-06
  • 2021-06-14
  • 1970-01-01
  • 2022-12-20
  • 1970-01-01
  • 2014-07-24
  • 2020-12-01
相关资源
最近更新 更多