Рассчитать среднее из 3 таблиц с R - PullRequest
0 голосов
/ 29 января 2020

У меня есть данные, которые состоят из 3 файлов: file1.csv, file2.csv, file3.csv. Файлы являются копиями измерений. Каждый файл состоит из 96 значений, расположенных в 12 столбцах (1-12) и 8 строках (ах). Мне нужно рассчитать среднее значение каждого измерения в трех повторностях (например, среднее значение a1 (файл1, файл2, файл3), a2 и т. Д. c). Мне не нужно среднее по столбцу или по строке - мне нужно среднее трех измерений для каждой ячейки (извините, не могу не думать в терминах Excel).

Поэтому я читаю каждый файл в R затем добавьте столбец «ключ» со значениями = rep1 для file1, rep2 для файла 2 и rep3 для файла 3 следующим образом:

file1 <- file1 %>% add_column(rep = rep1)
file2 <- file2 %>% add_column(rep = rep2)
file3 <- file3 %>% add_column(rep = rep3) 

Затем я использую dindly bind_rows () для генерации одного df, содержащего все данные ,

all.data <- bind_rows(file1, file2, file3)

и, наконец, используйте

finally <- aggregate(all.data, list(all.data$rep), mean)

Мои навыки R зачаточны, и я уверен, что ДОЛЖЕН быть более элегантный, простой способ сделать это. Хотел бы узнать как!

1 Ответ

2 голосов
/ 29 января 2020

В dplyr мы можем использовать параметр .id для добавления уникального индекса для каждого кадра данных вместо использования add_column для каждого кадра данных отдельно. Затем мы можем group_by этот уникальный индекс и использовать summarise_all, чтобы получить mean всех столбцов по группам.

library(dplyr)

bind_rows(file1, file2, file3, .id = "rep") %>%
   group_by(rep) %>%
   summarise_all(mean)

Аналогичным образом, используя data.table, можно использовать rbindlist

library(data.table)
rbindlist(list(file1, file2, file3),idcol = 'rep')[, lapply(.SD, mean), rep]
...