首页 文章

多个数据帧中的lapply聚合列R.

提问于
浏览
0

我在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

我尝试用lapply来实现它

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

然而,这给了我一个错误“参数必须具有相同的长度” . 我究竟做错了什么?

我想要的输出是列“Count”和“ID”的总和,如下所示:

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

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

4 回答

  • 2

    tidyverse 的选项将是

    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
    
  • 1

    我认为你过于复杂了 . 试试这个...

    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
    
  • 1

    这是第三种选择

    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
    
  • 2

    我想这就是你需要的

    library(dplyr)
    lapply(dfList,function(x) ddply(x,.(ID),summarize,Count=sum(Count)))
    

相关问题