我在一个目录中有多个文本文件(其中有数百个)。每个文本的尺寸为225行和50列(所有相同的行名和列名)。所有文本文件都是数字,我需要生成一个数据框,该数据框采用所有这些文本文件中每个单元的均值的标准误差。
有很多代码可以计算一个主数据帧,该主数据帧在目录中所有文本文件的每个单元格中具有平均值,而没有用于计算一个仅显示每个单元格均值标准误差的主数据帧的代码。
例如,这将引入所有文本文件,对其进行读取,并生成一个主数据帧,该数据帧具有每个文本文件的平均每个单元格的平均值。
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)
任何帮助将不胜感激。谢谢。
答案 0 :(得分:1)
一个选择是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)))