【发布时间】:2020-10-13 20:59:26
【问题描述】:
我正在尝试编写一个if 语句,该语句根据另一列中的范围将字符串粘贴到新列中。我尝试根据其他 SO 答案对语句进行建模,但总是收到警告消息和不正确的结果。示例数据框:
Var1 Var2
48 Na
4 Na
14 Na
7 Na
11 Na
44 Na
15 Na
37 Na
29 Na
22 Na
18 Na
17 Na
46 Na
24 Na
12 Na
尝试的脚本:
df$Var2 <- if(df$Var1 >=1 & df$Var1 <= 14) {
paste("string1")
} else if (df$Var1 >=15 & df$Var1 <=35) {
paste("string2")
} else {
paste ("error")
}
预期结果:
Var1 Var2
48 error
4 string1
14 string1
7 string1
11 string1
44 error
15 string2
37 error
29 string2
22 string2
18 string2
17 string2
46 error
24 string2
12 string1
当我运行上面的脚本时,我得到df$Var2 填充error 我收到警告:
1: 在 if (df$Var1 >= 1 & df$Var1 1 并且只有 将使用第一个元素
2: 在 if (df$Var1 >= 15 & df$Var1 1 并且只有 将使用第一个元素
3: 在 if (df$Var1 > 35) { : 条件 长度 > 1 并且只使用第一个元素
如果有人能提供一些关于最佳进展方式的帮助,将不胜感激。
【问题讨论】:
-
顺便说一句,
paste("string")等同于"string",使用单个静态字符串调用paste是无操作的。 -
条件
df$Var1 >= 1 & df$Var1 <= 14返回逻辑值向量 (FALSE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE),但if只能使用单个逻辑值,因此采用第一个逻辑值。这就是为什么必须使用不同功能的原因——@Duck 的答案建议的ifelse或dplyr的mutate。
标签: r