【问题标题】:sum of one column (with same name) in all data frames in a list列表中所有数据框中一列(同名)的总和
【发布时间】:2019-06-20 08:47:47
【问题描述】:

如何将列表中所有数据框中的一个特定列相加,然后将它们放入新数据框中? 一个小例子是:

A <- data.frame(matrix( nrow = 2, ncol = 2))
B <- data.frame(matrix( nrow = 2, ncol = 2))

A[,] <- 3
B[,] <- 4

l <- list(A,B)

假设我想总结列表中的所有列“X1”并放入一个数据框(向量,因为应该只有一行)。然后,此数据框的第一行应具有值 6 (3+3),第二行应具有值 8 (4+4)。

在实际数据中,我在列表中有 18 个数据帧,每个数据帧中要求和的列的长度不同。

我应该使用sapplylapply 函数吗?

【问题讨论】:

    标签: r list dataframe sum


    【解决方案1】:

    你可以使用colSums,即

    do.call(rbind, lapply(l, function(i)colSums(i['X1'])))
    #     X1
    #[1,]  6
    #[2,]  8
    

    【讨论】:

      【解决方案2】:

      这是sapply 的一个选项,我们将Extract 列“X1”转换为matrix,然后执行colSums

      colSums(sapply(l, `[[`, 'X1'))
      #[1] 6 8
      

      或者用map 来自purrr

      library(purrr)
      library(dplyr)
      map_dbl(l, ~ .x %>% 
                     pull(X1) %>% 
                     sum)
      #[1] 6 8
      

      如果需要作为data.frame

      map_dfr(l, ~ .x %>% 
                     summarise(X1 = sum(X1)))
      #   X1
      #1  6
      #2  8
      

      【讨论】:

        猜你喜欢
        • 2020-08-30
        • 1970-01-01
        • 1970-01-01
        • 2015-12-29
        • 2021-03-18
        • 1970-01-01
        • 2022-11-12
        • 1970-01-01
        • 2019-12-02
        相关资源
        最近更新 更多