从R中的目录中的多个文件计算平均值的标准误差

Calculating standard error of the mean from multiple files in a directory in R

我在一个目录中有多个文本文件(数百个)。每个文本的尺寸为 225 行和 50 列(所有相同的行名和列名)。所有文本文件都是数字,我需要生成一个数据框,该数据框采用所有这些文本文件的每个单元格均值的标准误差。

有很多代码可以计算一个主数据框,该数据框在一个目录中的所有文本文件的每个单元格中具有平均值,但是 none 用于计算一个仅显示标准错误的主数据框意味着在每个细胞中。

例如,这将引入所有文本文件,读取它们,并生成一个主数据框,其中包含每个文本文件的每个单元格的平均值。

txt <- lapply(list.files(pattern = ".txt"), read.delim)
Z <- Reduce("+", txt) / length(txt)

这给出了一个如下所示的数据框:

>head(Z)
      C1   C2  C3 
Row_1 20   22  25
Row_2 14   9   22

但这些是合并到一个数据框中的所有文本文件的平均值。我希望这是平均值的标准错误,不幸的是我还没有找到可以生成此结果的帖子。有很多帖子采用一个数据框列的标准错误,只是没有那么多存储在目录中。

我已经尝试过了,但是很不方便。它不起作用:

SE <- Reduce("sd", txt) /sqrt(length(txt)

如有任何帮助,我们将不胜感激。谢谢。

一个选项是 unlist,创建一个 array 并使用计算标准误差的自定义函数之一

library(plotrix)
dim1 <- c(dim(txt[[1]]), length(txt))
apply(array(unlist(txt), dim1), 1:2, std.error)
#          [,1]      [,2]     [,3]      [,4]
#[1,] 1.666667 1.2018504 1.452966 1.7638342
#[2,] 2.081666 1.5275252 1.527525 2.3333333
#[3,] 2.027588 0.8819171 1.855921 0.8819171

这也等于 OP 显示的用于计算的函数

apply(array(unlist(txt), dim1), 1:2,  function(x) sd(x)/sqrt(length(x)))
#        [,1]      [,2]     [,3]      [,4]
#[1,] 1.666667 1.2018504 1.452966 1.7638342
#[2,] 2.081666 1.5275252 1.527525 2.3333333
#[3,] 2.027588 0.8819171 1.855921 0.8819171

也可以用来计算mean

Reduce(`+`, txt)/length(txt)
#        V1       V2       V3       V4
#1 5.333333 6.333333 5.333333 4.666667
#2 4.000000 3.000000 4.000000 5.333333
#3 4.666667 4.666667 6.666667 6.666667

apply(array(unlist(txt), dim1), 1:2, mean)
#         [,1]     [,2]     [,3]     [,4]
#[1,] 5.333333 6.333333 5.333333 4.666667
#[2,] 4.000000 3.000000 4.000000 5.333333
#[3,] 4.666667 4.666667 6.666667 6.666667

apply(array(unlist(txt), dim1), 2, rowMeans)

数据

set.seed(24)
txt <- lapply(1:3, function(i) as.data.frame(matrix(sample(1:9, 3 * 4, 
      replace = TRUE), 3, 4)))