如果statement为true,则从另一个变量复制一个值

时间:2014-05-25 23:05:42

标签: r variables

我有一个小问题,或者实际上有点大。 我有一个包含3个变量的数据集,我使用atm,让我们称之为var1,var2和var3。 总的来说,我在每个变量中都有超过3000个带有NA值的观测值。

var1 = age_1,var2 =是/否和var3 = age_2

我想做的是如果var2 ="是" var1的值应该合并到var3中。 我这样做了:

var3[var2=="Yes"]<-var1

但我收到错误消息:

Error in var3[var2 == "Yes"] <-var1 :

下属作业中不允许使用NA

有人能快速解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

你可以尝试

var3 <- ifelse(var2 == "Yes", var1, var3)

答案 1 :(得分:2)

错误听起来好像NA中有var2个值。您可以进行测试,看看是否sum(is.na(var))>0因此,如果您有缺失值,则R不想猜测丢失是否与&#34相同;是&#34;或&#34;否&#34;所以你得到错误。

此外,通过仅对作业的一侧编制索引,您不必跨行匹配值。因此,即使您修正了NA值,也可能会导致number of items to replace is not a multiple of replacement length错误。

一个技巧是使用which从逻辑索引中删除NA值并将它们转换为数字索引。然后,一旦知道要替换的行,就可以在赋值的两端使用相同的索引。

idx <- which(var2=="Yes")
var3[idx] <- var1[idx]

或者您可以使用ifelse功能,使所有这些步骤更加轻松

var3<-ifelse(var2=="Yes", var1, var3)