在分数的分母中处理NAs为0而不是分子

时间:2015-03-11 18:34:03

标签: r

我有三个变量:

  data.frame(x=c(1, NA, 3), y=3:5, z=c(NA, NA, 3))

我想创建一个值,表示x这样的总和

的比例
x/(x+y+z) 

将返回一个向量

1/(1+3+0), NA, 3/(3+5+3). 

这怎么可能?我尝试了x [is.na(x)]< - 0然后运行该代码,但是第二个值返回0。

1 个答案:

答案 0 :(得分:3)

我想这应该给出预期的结果

 d1[,1]/rowSums(d1, na.rm=TRUE)
 #[1] 0.2500000        NA 0.2727273

或者使用recode中的car将NA更改为0

 library(car)
 d1[,1]/Reduce(`+`, lapply(d1, recode, 'NA=0'))
 #[1] 0.2500000        NA 0.2727273

 library(qdap)
 d1[,1]/Reduce(`+`,NAer(d1))
 #[1] 0.2500000        NA 0.2727273

数据

 d1 <- data.frame(x=c(1, NA, 3), y=3:5, z=c(NA, NA, 3))