新手,在此先感谢您的帮助
我有一个包含多个数据框(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
任何帮助将不胜感激!
答案 0 :(得分:0)
我知道这个问题已经很老了,但是我遇到了同样的问题并将其修复,因此我认为它可能仍然很有趣。
我没有设法让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)
}