减去忽略NA的多个列

时间:2014-04-23 21:15:53

标签: r

我对R来说相当新,并且遇到了NA的问题。这个问题可能已在其他地方得到解答,但我似乎无法找到答案。我尝试与rowSums()相反,因为我试图从x2中减去x3x1以生成x4 {1}}没有NA&#39}。我目前使用的代码如下:

> 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

换句话说,我想让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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:5)

如果所有列都有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)

如果您想将NAs视为0.否则您可以将上述公式中的0替换为您需要的值。

答案 1 :(得分:3)

只需使用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