我有三个变量:
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。
答案 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))