我尝试用一些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
答案 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