apply и агрегатные столбцы для списка фреймов данных R - PullRequest
0 голосов
/ 18 июня 2019

Новичок здесь, заранее спасибо за помощь

У меня есть список из нескольких фреймов данных (AllExplants) с одинаковым количеством столбцов (с одинаковыми именами) и разным количеством строк. Я хочу объединить столбцы для всех данных в списке сразу.

Мои данные: для простоты я буду использовать список из двух фреймов данных

AllExplants <- list(Explant1, Explant2)

Explant1:

 `Sample Name`                       `Tissue Category` `Annotation ID`                              All Negative `Non-nuclear`   PD1  PDL1
1 LT181- PD1 PDL1 MNF -1_Scan1.qptiff All               LT181- PD1 PDL1 MNF -1_Scan1_[10311,49192] 25140     4954            23  4418 15635
2 LT181- PD1 PDL1 MNF -1_Scan1.qptiff Stroma            LT181- PD1 PDL1 MNF -1_Scan1_[10311,49192]  8788     1678            23  2922  4114
3 LT181- PD1 PDL1 MNF -1_Scan1.qptiff Tumour            LT181- PD1 PDL1 MNF -1_Scan1_[10311,49192] 16344     3268             0  1496 11521
4 LT181- PD1 PDL1 MNF -1_Scan1.qptiff All               LT181- PD1 PDL1 MNF -1_Scan1_[10311,51272] 37930     9847           137  9821 17921
5 LT181- PD1 PDL1 MNF -1_Scan1.qptiff Stroma            LT181- PD1 PDL1 MNF -1_Scan1_[10311,51272] 17400     5700           123  4914  6544
6 LT181- PD1 PDL1 MNF -1_Scan1.qptiff Tumour            LT181- PD1 PDL1 MNF -1_Scan1_[10311,51272] 20526     4144            13  4907 11377
7 LT181- PD1 PDL1 MNF -1_Scan1.qptiff All               LT181- PD1 PDL1 MNF -1_Scan1_[12161,50230]  2315     1105            34   334   818
8 LT181- PD1 PDL1 MNF -1_Scan1.qptiff Stroma            LT181- PD1 PDL1 MNF -1_Scan1_[12161,50230]  1666      934            30   266   427
9 LT181- PD1 PDL1 MNF -1_Scan1.qptiff Tumour            LT181- PD1 PDL1 MNF -1_Scan1_[12161,50230]   639      164             1    68   391    

Explant2:

  `Sample Name`                       `Tissue Category` `Annotation ID`                              All Negative `Non-nuclear`   PD1  PDL1
1 LT181- PD1 PDL1 MNF -1_Scan1.qptiff All               LT181- PD1 PDL1 MNF -1_Scan1_[10872,46112] 19602     4370            47  3176 11983
2 LT181- PD1 PDL1 MNF -1_Scan1.qptiff Stroma            LT181- PD1 PDL1 MNF -1_Scan1_[10872,46112]  8479     2158            36  2624  3644
3 LT181- PD1 PDL1 MNF -1_Scan1.qptiff Tumour            LT181- PD1 PDL1 MNF -1_Scan1_[10872,46112] 11116     2207            11   552  8339
4 LT181- PD1 PDL1 MNF -1_Scan1.qptiff All               LT181- PD1 PDL1 MNF -1_Scan1_[11335,47845] 14783     2036            10  1697 10973
5 LT181- PD1 PDL1 MNF -1_Scan1.qptiff Stroma            LT181- PD1 PDL1 MNF -1_Scan1_[11335,47845]  3179      494             6   894  1770
6 LT181- PD1 PDL1 MNF -1_Scan1.qptiff Tumour            LT181- PD1 PDL1 MNF -1_Scan1_[11335,47845] 11604     1542             4   803  9203

Я хочу объединить столбцы 4-8 (т.е. все, отрицательные, неядерные, PD1, PDL1) и сделать это в соответствии со столбцом 2 (категория тканей)

Я могу сделать это для каждого отдельного кадра данных (если его нет в списке), с кодом ниже

Explant1_agg <- aggregate(Explant1 [,4:8], by=list(Explant1$`Tissue Category`), FUN=sum)

Однако для того, чтобы применить одну и ту же функцию ко всем кадрам данных в списке, я попробовал этот код, посмотрев здесь сообщения:

AllExplants_agg <- lapply(AllExplants, function(x) {aggregate(x[,4:8], by=list(x[,2]),  FUN=sum)})

Однако R возвращает ошибку

 Error in aggregate.data.frame(x[, 4:8], by = list(x[, 2]), FUN = sum) : 
  arguments must have same length 

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

...