Как я могу суммировать один конкретный столбец во всех фреймах данных в списке и помещать их в новый фрейм данных? Небольшой пример:
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 фреймов данных в списке, и столбцы для суммирования в каждом фрейме данных имеют разную длину.
Может быть, мне следует использовать функцию sapply
или lapply
?
Вы можете использовать colSums
, т.е.
do.call(rbind, lapply(l, function(i)colSums(i['X1'])))
# X1
#[1,] 6
#[2,] 8
Вот один из вариантов с 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