对R中的两列求和,使NA+;NA=NA,但NA+;(一个数字)=0+;(一个数字)
我在R中有一个数据帧,它由NA和数字组成。看起来是这样的:对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
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。尤其是当我读你的代码时。