列表中所有数据框中的一列(具有相同名称)的总和

时间:2019-06-20 08:47:47

标签: r list dataframe sum

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

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个数据帧,每个数据帧中要累加的列的长度不同。

Mabye,我应该使用sapply还是lapply函数?

2 个答案:

答案 0 :(得分:0)

您可以使用colSums,即

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

答案 1 :(得分:0)

这是sapply的一个选项,其中我们将列“ X1” Extract插入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

如果需要作为数据框

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