减去忽略NA的多个列

rmb*_*man 8 r

我对R很新,并且遇到了NA的问题.这个问题可能已在其他地方得到解答,但我似乎无法找到答案.我试图做一些相反的rowSums()事情,因为我试图减去x2x3从中x1产生x4没有NA的产生.我目前使用的代码如下:

> x <- data.frame(x1 = 3, x2 = c(4:1, 2:5), x3=c(1,NA))
> x$x4=x$x1-x$x2-x$x3
> x

  x1 x2 x3 x4
1  3  4  1 -2
2  3  3 NA NA
3  3  2  1  0
4  3  1 NA NA
5  3  2  1  0
6  3  3 NA NA
7  3  4  1 -2
8  3  5 NA NA
Run Code Online (Sandbox Code Playgroud)

换句话说,我想让NA的内容类似于如何rowSums允许na.rm=TRUE参数,以便得到这个结果:

  x1 x2 x3 x4
1  3  4  1 -2
2  3  3 NA  0
3  3  2  1  0
4  3  1 NA  2
5  3  2  1  0
6  3  3 NA  0
7  3  4  1 -2
8  3  5 NA -2
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏.

RHe*_*elp 6

如果所有列都具有NA,则可以使用类似的方法-

x$x4 <- ifelse(is.na(x$x1),0,x$x1) -ifelse(is.na(x$x2),0,x$x2)-ifelse(is.na(x$x3),0,x$x3)
Run Code Online (Sandbox Code Playgroud)

如果您要将NA视为0。否则,您可以将上面公式中的0替换为所需的值。


Tho*_*mas 4

只需使用rowSums

> x$x4 <- x$x1 - rowSums(x[,2:3], na.rm=TRUE)
> x
  x1 x2 x3 x4
1  3  4  1 -2
2  3  3 NA  0
3  3  2  1  0
4  3  1 NA  2
5  3  2  1  0
6  3  3 NA  0
7  3  4  1 -2
8  3  5 NA -2
Run Code Online (Sandbox Code Playgroud)

  • 如果 x1 和 x2 也包含 NA,知道如何解决这个问题吗? (2认同)
  • 您可能想要类似 `ifelse(!is.na(x$x1), x$x1 - rowSums(x[,2:3], na.rm=TRUE), 0 - rowSums(x[,2:3] , na.rm=TRUE))` (2认同)