lappy在多个数据帧中聚合列R

lappy在多个数据帧中聚合列R,r,aggregate,lapply,R,Aggregate,Lapply,我在R中的列表中有几个数据帧。我想总结一下每个DF中都有条目。我正在尝试进入lapply,所以这将是我的首选方式,但如果有更好的解决方案,我很乐意知道它和原因 我的样本数据: df1 <- data.frame(Count = c(1,2,3), ID = c("A","A","C")) df2 <- data.frame(Count = c(1,1,2), ID = c("C","B","C")) dfList <- list(df1,df2) > head(dfLi

我在R中的列表中有几个数据帧。我想总结一下每个DF中都有条目。我正在尝试进入lapply,所以这将是我的首选方式,但如果有更好的解决方案,我很乐意知道它和原因

我的样本数据:

df1 <- data.frame(Count = c(1,2,3), ID = c("A","A","C"))
df2 <- data.frame(Count = c(1,1,2), ID = c("C","B","C"))
dfList <- list(df1,df2)

> head(dfList)
[[1]]
  Count ID
1     1  A
2     2  A
3     3  C

[[2]]
  Count ID
1     1  C
2     1  B
3     2  C

我想这就是你需要的

library(dplyr)
lapply(dfList,function(x) ddply(x,.(ID),summarize,Count=sum(Count)))
tidyverse的一个选项是

这是第三种选择

lapply(dfList, function(x) aggregate(. ~ ID, data = x, FUN = "sum"))
#[[1]]
#  ID Count
#1  A     3
#2  C     3
#
#[[2]]
#ID Count
#1  B     1
#2  C     3

我认为你把它复杂化了。试试这个

dfList_agg<-lapply(dfList, function(i) {
  aggregate(i[,1], by=list(i[,2]), FUN=sum)
})

dflist_agg

[[1]]
  Group.1 x
1       A 3
2       C 3

[[2]]
  Group.1 x
1       B 1
2       C 3

i[,1]表达式做什么?我的i[[1:lengthi]][1L]是否有差异?显然是的,因为您的代码可以工作;它从数据帧i中选择列1作为dfList的元素之一。在表达式中,1:lengthi是多余的,因为它只是所有列,尽管使用[[注释]您将df视为列列表。我认为您的表达式也应该选择I的第一列,但它的结构可能稍有不同。我认为主要的问题是by表达式不起作用-主要是因为您使用的是名称长度1,而不是ID值的实际列。
library(tidyverse)
map(dfList, ~ .x %>%
                group_by(ID) %>% 
                summarise(Count = sum(Count)) %>%
                select(names(.x)))
#[[1]]
# A tibble: 2 x 2
#   Count ID    
#  <dbl> <fctr>
#1  3.00 A     
#2  3.00 C     

#[[2]]
# A tibble: 2 x 2
#  Count ID    
#  <dbl> <fctr>
#1  1.00 B     
#2  3.00 C     
lapply(dfList, function(x) aggregate(. ~ ID, data = x, FUN = "sum"))
#[[1]]
#  ID Count
#1  A     3
#2  C     3
#
#[[2]]
#ID Count
#1  B     1
#2  C     3
dfList_agg<-lapply(dfList, function(i) {
  aggregate(i[,1], by=list(i[,2]), FUN=sum)
})

dflist_agg

[[1]]
  Group.1 x
1       A 3
2       C 3

[[2]]
  Group.1 x
1       B 1
2       C 3