在R中如何计算列表内多个dataframe相同位置单元格的标准差
问题背景
我目前有一个包含多个维度一致的dataframe的列表,满足以下条件:
- dataframe中的每个单元格对应唯一样本的一次读数
- 每个dataframe都是同一批数据的重复测量结果
示例数据构造代码如下:
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)
示例数据输出参考:
> 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列表,最终输出维度一致的dataframe,每个单元格存储列表中所有dataframe相同位置数据的标准差。
解决方案
方法1:Base R实现(无需额外安装依赖包)
sd_result <- as.data.frame(apply(simplify2array(sampledData), c(1, 2), sd))
代码逻辑说明:
simplify2array(sampledData)将同维度的dataframe列表转换为三维数组,第三维对应列表中每个dataframe的元素apply(..., c(1,2), sd)对数组的每一个行、列位置,提取所有重复测量值计算标准差as.data.frame()将计算得到的标准差矩阵转换为dataframe格式,输出结果和原数据维度、列名完全匹配
方法2:tidyverse/purrr风格实现
library(purrr) sd_result <- pmap_dfr(transpose(sampledData), ~sd(c(...)))
内容的提问来源于stack exchange,提问作者Zander
相关产品推荐
相关产品推荐

