对R中的两列求和,使NA+;NA=NA,但NA+;(一个数字)=0+;(一个数字)

对R中的两列求和,使NA+;NA=NA,但NA+;(一个数字)=0+;(一个数字),r,R,我在R中有一个数据帧,它由NA和数字组成。看起来是这样的: a b 1 1 3 2 NA NA 3 3 2 4 NA 1 5 4 NA sum 1 4 2 NA 3 5 4 1 5 4 我希望能够在此数据帧中对两列求和,使NA+NA=NA,但是当用数字求和时,NA应被视为0。例如,上面数据框中的“a”和“b”之和应如下所示: a b 1 1 3 2 NA NA 3 3 2 4 NA 1 5 4 NA sum 1 4 2

我在R中有一个数据帧,它由NA和数字组成。看起来是这样的:

   a  b
1  1  3
2 NA NA
3  3  2
4 NA  1
5  4 NA
  sum
1   4
2  NA
3   5
4   1
5   4
我希望能够在此数据帧中对两列求和,使NA+NA=NA,但是当用数字求和时,NA应被视为0。例如,上面数据框中的“a”和“b”之和应如下所示:

   a  b
1  1  3
2 NA NA
3  3  2
4 NA  1
5  4 NA
  sum
1   4
2  NA
3   5
4   1
5   4

有人知道我会怎么做吗?

我们可以使用
rowSums
na.rm=TRUE
在对行进行求和时删除NAs。确保将所有
NAs
行更改为NA

v1 <- unname(rowSums(df1, na.rm = TRUE)* NA^(rowSums(is.na(df1))==2))
data.frame(Sum = v1)
# Sum
#1   4
#2  NA
#3   5
#4   1
#5   4
数据
df1尝试使用
rowSums(df1,na.rm=TRUE)*na^(rowSums(is.na(df1))==2)
我以前从未见过这种
na^
符号。为了阅读更多关于它的信息,我会搜索什么?@DavidT返回1和NA是一种很不礼貌的方式。i、 e.
NA^c(TRUE,FALSE,TRUE)
返回
NA 1 NA
在代码中,我返回TRUE,其中两列都是NA,行和
==2
@DavidT我想说我在利用这个属性
NA^1[#1]NA
NA^0[1]1
然而,当我每天学习新东西时,一个更可读的选项是
ifelse
case\u。尤其是当我读你的代码时。