Я хочу суммировать несколько столбцов кадров данных в списке и показывать только сумму, не показывая столбцы ввода (вычисления). Вот пример:R: Как суммировать несколько столбцов фреймов данных в списке?
ls <- list(data.frame(a=1, b=5, c=3, d=2), data.frame(a=NA, b=2, c=7, d=9))
ls
[[1]]
a b c d
1 1 5 3 2
[[2]]
a b c d
1 NA 2 7 9
мой ожидаемый результат:
ls2
[[1]]
c new
1 3 8
[[2]]
c new
1 7 11
Любые идеи, как это сделать? До сих пор я пытался увеличить этот answer для списков без успеха и без опускания входных столбцов (a, b, d). Я пытался до сих пор lapply:
lapply(ls, function(x) x$e <- rowSums(x[,c("a", "b", "d")], na.rm=T))
and
ls$e <- lapply(ls, function(x) rowSums(x[,c("a", "b", "d")], na.rm=T))
Спасибо заранее
Edit: Благодаря Aech и Абду за ваши ответы, которые работают хорошо с этим примером. Однако у меня есть> 200 столбцов, знаете ли вы способ, не записывая столбцы, которые останутся? Как удаление столбцов, которые я использую для вычисления, вместо того, чтобы называть все столбцы.
EDIT 2: Спасибо за ваш улучшенный код, он хорошо работает с данными примера. Однако, мои истинные данные установить не ... Я получаю следующее сообщение об ошибке:
Error in rowSums(x[, columns_to_sum], na.rm = T) :
'x' must be an array of at least two dimensions"
Мой список насчитывает около 96 матриц с 200 столбцов и одной строки. Но я не знаю, как подготовить воспроизводимый пример моей ошибки. Есть идеи?
Ваш другой вопрос является точной контратип этого. Вы не можете публиковать повторяющиеся вопросы о SO. Если этот вопрос недостаточно хорош, вы должны его отредактировать, предоставить минимальный воспроизводимый пример и точно объяснить, что именно вы ищете. –