如何汇总列表中所有数据框中的一个特定列,然后将它们放入新的数据框中? 一个小例子是:
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
函数?
答案 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