сумма одного столбца (с одинаковым именем) во всех фреймах данных в списке - PullRequest
0 голосов
/ 20 июня 2019

Как можно суммировать один конкретный столбец во всех фреймах данных в списке и поместить их в новый фрейм данных? Небольшой пример:

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 голосов
/ 21 июня 2019

Вот один вариант с 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
0 голосов
/ 20 июня 2019

Вы можете использовать colSums, т.е.

do.call(rbind, lapply(l, function(i)colSums(i['X1'])))
#     X1
#[1,]  6
#[2,]  8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...