给定一个data.frame,如果var1和var2同时(意味着在同一行上)缺少值,则尝试将var4的值分配给var3,否则var3保留其自己的值。
我试过了,但是行不通,有什么建议吗?非常感谢。
aaa<-function(x) {
ifelse((is.na(x$var1)&is.na(x$var2)),
x$var3<-x$var4, x$var3<-x$var3)
return(x)
}
例如:
var1 var2 var3 var4
NA NA NA 1.610
5 NA 4 6
2 1 3.5 NA
1 1.5 2.5 3
我期望:
var1 var2 var3 var4
NA NA 1.610 1.610
5 NA 4 6
2 1 3.5 NA
1 1.5 2.5 3
ifelse
这里不需要,因为您的“ no”语句没有做任何事情。您需要做的就是找到正确的行并仅替换它们,而其余所有行都保持不变。这是一个简单的基础R方法
indx <- with(df, is.na(var1) & is.na(var2))
df[indx, "var3"] <- df[indx, "var4"]
不过,为了提高效率和减少按键操作,我建议您使用该data.table
软件包并通过引用更新值
library(data.table)
setDT(df)[is.na(var1) & is.na(var2), var3 := var4]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句