我想在列中返回一个值,或NA,取决于其他列中的值。
我基本上想看看列中的值是否符合第一个测试标准:
df$v2.1 >= df$varx & df$v3.1 <6
如果没有,它会遇到第二个:
df$v4.1 >= df$vary & df$v5.1 >5
然后如果两者都没有返回NA
我试过的代码如下。
df$v1.1 = ifelse(df$v2.1 >= df$varx & df$v3.1 <6 || df$v4.1 >= df$vary & df$v5.1 >5 ,df$v1.1, NA)
答案 0 :(得分:2)
您唯一的错误是使用||
而不是|
。 ||
没有矢量化,只考虑第一个元素。所有其他运算符(和ifelse()
)都是矢量化的,因此以下内容应按预期工作:
df$v1.1 = ifelse(df$v2.1 >= df$varx & df$v3.1 <6 | df$v4.1 >= df$vary & df$v5.1 > 5, df$v1.1, NA)
检查您何时执行相当复杂或多个逻辑操作的好方法是运行每个操作,看看您是否获得了预期的输出。如果您运行:
df$v2.1 >= df$varx & df$v3.1 <6
或
df$v4.1 >= df$vary & df$v5.1 > 5
你应该得到一个逻辑值向量。如果您运行:
df$v2.1 >= df$varx & df$v3.1 <6 || df$v4.1 >= df$vary & df$v5.1 > 5
你应该得到一个逻辑值。在您的情况下,这将从ifelse()
提供一个结果,然后将其回收以填充df$v1.1
。
答案 1 :(得分:1)
据我所知,df $ v1.1已经定义,因此您只需修改ifelse中未通过测试的那些行。以下可能更容易:
df$v1.1[
which(
!(df$v2.1 >= df$varx & df$v3.1 <6) & !(df$v4.1 >= df$vary & df$v5.1 >5))
] <- NA