Сумма двух столбцов фрейма данных со значениями NA

Мне не повезло с решениями, предлагаемыми на этой странице раньше, но потом, наконец, этот небольшой трюк сработал. Я включу его в другое возможное решение.

footer {
  position: fixed;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 1rem;
  background-color: #efefef;
  text-align: center;
}
17
задан StatDance 16 July 2015 в 17:59
поделиться

4 ответа

dat$e <- rowSums(dat[,c("b", "c")], na.rm=TRUE)
dat
#   a  b c d e
# 1 1  2 3 4 5
# 2 5 NA 7 8 7
26
ответ дан jenesaisquoi 16 July 2015 в 17:59
поделиться

dplyr решение, взятое из здесь :

library(dplyr)
dat %>% 
    rowwise() %>% 
    mutate(e = sum(b, c, na.rm = TRUE))
5
ответ дан David Rubinger 16 July 2015 в 17:59
поделиться

Вот еще одно решение с конкатенацией ifelse():

 dat$e <- ifelse(is.na(dat$b) & is.na(dat$c), dat$e <-0, ifelse(is.na(dat$b), dat$e <- 0 + dat$c, dat$b + dat$c))
 #  a  b c d e
 #1 1  2 3 4 5
 #2 5 NA 7 8 7

Правка, вот еще одно решение, которое использует with, как предложено @kasterma в комментариях, это много более читабельным и простым:

 dat$e <- with(dat, ifelse(is.na(b) & is.na(c ), 0, ifelse(is.na(b), 0 + c, b + c)))
1
ответ дан erasmortg 16 July 2015 в 17:59
поделиться

Если вы хотите сохранить NA, если он есть в обоих столбцах, вы можете использовать:

Данные, образец:

dt <- data.table(x = sample(c(NA, 1, 2, 3), 100, replace = T), y = sample(c(NA, 1, 2, 3), 100, replace = T))

Решение:

dt[, z := ifelse(is.na(x) & is.na(y), NA_real_, rowSums(.SD, na.rm = T)), .SDcols = c("x", "y")]

( data.table way)

0
ответ дан K. Peltzer 16 July 2015 в 17:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: