簡體   English   中英

數據框 R 列表的 lapply 和聚合列

[英]lapply and aggregate columns for list of dataframes R

新手在這里,提前感謝您的幫助

我有一個包含多個數據框(AllExplants)的列表,列數相同(名稱相同)和行數不同。 我希望一次聚合列表中所有數據框的列。

我的數據:為簡單起見,我將在這里使用兩個數據框的列表

AllExplants <- list(Explant1, Explant2)

外植體1:

 `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    

外植體2:

  `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 

任何幫助將不勝感激!

我知道這個問題已經很老了,但我遇到了同樣的問題並修復了它,我認為它可能仍然很有趣。
我沒有設法讓 R 整體使用列表,但我使用 for 循環解決了這個問題:

dat=seq(from=1, by=1, to=length(All_Explants))
#list to ID dataframes
output_All_Explants=list() #create list for output data from for loop
for (i in dat) { 
    dummy=as.data.frame(All_Explants[[i]])
    Output_All_Explants[[i]]=aggregate(dummy[,4:8], 
    by=list(date=dummy$Tissue Category), FUN=sum) 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM