对2列求和,忽略NA,除非两者均为NA

时间:2019-05-23 09:30:13

标签: r sum data.table na

我尝试用一​​些NA对2列求和。有很多论坛问题,例如我的第一个问题:如何求和和忽略NA,但是现在我确实希望当两列在特定行中都有NA时返回NA。这是一个示例:

  df<-data.table(x = c(1,2,NA),
                 y = c(1,NA,NA))
> df
  x  y
  1  1
  2 NA
 NA NA

我想要这个:

  x  y final
  1  1   2
  2 NA   2
 NA NA   NA

我尝试了以下操作:

df$sum<-rowSums(df[,c("x", "y")], na.rm=TRUE)
  df$final<-ifelse (is.na(df$x) && is.na(df$y) , NA,
                              ifelse (is.na(df$x) | is.na(df$y), df$sum,
                                      ifelse (!is.na(df$x) && !is.na(df$y), df$sum)))

但这不会返回我想要的东西。有人可以帮助我吗??

注意:有人说这是重复的,原因是我要求忽略NA,但是这些问题并不能回答我的主要问题:2 x {NA如何让我NA和不是0

2 个答案:

答案 0 :(得分:4)

我使用了以下内容。即使存在NA,它也会给出总和,但是当所有求和元素都是NA时,它就会返回NA。

rowSums(df, na.rm = TRUE) * NA ^ (rowSums(!is.na(df)) == 0)

答案 1 :(得分:3)

这里还有两个选项:

ifelse(rowSums(is.na(df)) != ncol(df), rowSums(df, na.rm = TRUE), NA)
#[1]  2  2 NA

vals <- rowSums(df, na.rm = TRUE)
NA^(vals == 0) * vals 
#[1]  2  2 NA