Расчет стандартной ошибки среднего из нескольких файлов в каталоге в R - PullRequest
1 голос
/ 28 июня 2019

У меня есть несколько текстовых файлов (сотни из них) в каталоге. Каждый текст имеет размеры 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)

Любая помощь будет принята с благодарностью. Спасибо вам.

1 Ответ

1 голос
/ 28 июня 2019

Один из вариантов: 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)))
...