r - 粘贴 if 条件 R
问题描述
我正在尝试编写一个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 并且只使用第一个元素
如果有人可以提供一些关于最佳进展方式的帮助,将不胜感激。
解决方案
如果您想以这种方式测试条件,最好使用ifelse()
. 该函数if()
适用于单个值,这就是您收到警告的原因,因为您想将其应用于数据帧内的变量。这里的代码:
#Code
df$Var2 <- ifelse(df$Var1 >=1 & df$Var1 <= 14,'string1',
ifelse(df$Var1 >=15 & df$Var1 <=35,'string2','error'))
其他选项可以根据条件使用索引:
#Code 2
df$Var2 <- 'error'
#Conditions
cond1 <- df$Var1 >=1 & df$Var1 <= 14
cond2 <- df$Var1 >=15 & df$Var1 <=35
#Assign
df$Var2[cond1]<-'string1'
df$Var2[cond2]<-'string2'
这两个选项将产生相同的输出:
df
Var1 Var2
1 48 error
2 4 string1
3 14 string1
4 7 string1
5 11 string1
6 44 error
7 15 string2
8 37 error
9 29 string2
10 22 string2
11 18 string2
12 17 string2
13 46 error
14 24 string2
15 12 string1
使用的一些数据:
#Data
df <- structure(list(Var1 = c(48L, 4L, 14L, 7L, 11L, 44L, 15L, 37L,
29L, 22L, 18L, 17L, 46L, 24L, 12L), Var2 = c("Na", "Na", "Na",
"Na", "Na", "Na", "Na", "Na", "Na", "Na", "Na", "Na", "Na", "Na",
"Na")), class = "data.frame", row.names = c(NA, -15L))
或者按照@Dan在评论dplyr
中的建议使用:
library(dplyr)
#Code
df <- df %>% mutate(Var2=ifelse(Var1 >=1 & Var1 <= 14,'string1',
ifelse(Var1 >=15 & Var1 <=35,'string2','error')))
推荐阅读
- python - 基于另一个没有迭代的数据框列的累积和?
- angular - 带有来自服务的数据的 Angular FormArray setValue
- django - Django - 在 URL 中为 API 调用传递 json 或数组
- python - 使钱包的交易确认自动进行
- generics - 使用存储库模式通用存储库调用存储过程
- flutter - 如何在颤动中验证 DropdownBelow
- html - HTML IMG:在 HTML 标记中设置显式宽度和高度属性有什么好处?
- applescript - (不神秘:)Automator 如何将“不可见”信息传输到 Script-Editor
- python - 如何从具有 YYYY-YY 等数据的 CSV 列中仅提取年份(YYYY)
- unity3d - 导入统一时纹理被强化