根据 NA 在数据框的其他两个变量中赋值
Assign values based on NA in other two variables of a data frame
给定一个 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]
给定一个 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]