Средние кадры данных с общими символами в названии в списке в R - PullRequest
0 голосов
/ 08 января 2019

У меня есть несколько файлов .csv из разных экспериментов, некоторые из которых являются повторениями одного и того же эксперимента и поэтому должны быть усреднены. Файлы имеют тип:

A_a.csv, A_b.csv, A_c.csv; B_a.csv, B_c.csv; C_a.csv, C_b.csv, C_c.csv, C_d.csv и т. Д.

где A, B, C, ... относятся к разным экспериментам, а a, b, c, ... относятся к повторам одного и того же эксперимента. Каждый CSV-файл содержит столбец Time и столбец Abs.

Я создал список фреймов данных из всех этих файлов, и я хочу получить список, в котором повторы усредняются, поэтому на выходе получится такой список:

A.csv, B.csv, C.csv, ...

где A, B, C, ... - фреймы данных, где Time и Abs - среднее по строке времени и Abs каждого повторного эксперимента. Ниже я прилагаю упрощенный пример, где Li - начальный список, а Lf - желаемый результат:

Li<- list(A_a=data.frame(Time=1:5,Abs=1:5),A_b=data.frame(Time=1:5,Abs=3:7),A_c=data.frame(Time=1:5,Abs=5:9),B_a=data.frame(Time=1:5,Abs=2:6),B_b=data.frame(Time=1:5,Abs=3:7))

Lf<-list(A=data.frame(Time=1:5,Abs=3:7),B=data.frame(Time=1:5,Abs=seq(2.5,6.5,1)))

Я думаю, что мне нужно получить R, чтобы искать кадры данных в списке, которые имеют одинаковые первые x символов в имени, изолировать эти кадры данных, усреднить соответствующим образом, а затем сгенерировать кадр данных с этим именем и без повторения расширение эксперимента (в нашем примере это строчные буквы после _), но я не знаю, как это сделать. Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 08 января 2019

Используя data.table, вы можете связать список связывания строк в один data.table, а затем выполнить агрегацию для каждой группы.

library(data.table)
out <- rbindlist(Li, idcol = "id")[, .(Abs = mean(Abs)), by = .(id = substring(id, 1, 1), Time)]
out
#    id Time Abs
# 1:  A    1 3.0
# 2:  A    2 4.0
# 3:  A    3 5.0
# 4:  A    4 6.0
# 5:  A    5 7.0
# 6:  B    1 2.5
# 7:  B    2 3.5
# 8:  B    3 4.5
# 9:  B    4 5.5
#10:  B    5 6.5

Как видите, это приводит к одному data.table. Используйте split(out, out[, id]), если вам нужен список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...