我必须查看值列表是否属于值范围,然后分配特定值。我想找到一种方法来做到这一点,而不必使用嵌套的ifelse()
语句(刚学会ifelse
不能嵌套超过51次,看起来太可怕了。)。
由于这是一个人为的例子,我想知道是否有一种通用的方法(例如循环?*适用)?我正在考虑与paste(eval())
有关但无法使其发挥作用。提前谢谢。
set.seed(2222)
comparison_table = data.frame(
lower_comp = c('>=', '>=', '>='),
upper_comp = c('<', '<', '<'),
lower_value = c(3, 33, 100),
upper_value = c(31, 40, 120),
new_value = c(1, 2, 3)
)
df = data.frame(
value = runif(n = 25, min = 1, max = 130)
)
df$new_value = with(df,
ifelse(value >= 3 & value < 33, 1,
ifelse(value >= 33 & value < 100, 2,
ifelse(value >= 100 & value < 120, 3, NA))))
value new_value
48.427905 NA
24.461992 1
107.576807 3
76.461703 NA
124.694209 NA
14.132063 1
98.638509 NA
32.436195 NA
88.470441 NA
9.095131 1
49.548878 NA
85.647608 NA
75.357280 NA
120.696858 NA
113.347924 3
51.364939 NA
126.896975 NA
128.282762 NA
115.333414 3
75.022578 NA
128.170932 NA
2.200451 NA
24.085131 1
99.672971 NA
24.945700 1
答案 0 :(得分:3)
您可以使用cut()
分割您的数值向量:
df$new_value <- cut(df$value, breaks= c(3,33,100,120),labels=FALSE, right = FALSE)
这定义了三个间隔(外部任何东西都默认为NA
):
[3,33)
[33,100)
[100,120)
使用right = FALSE
使左侧包含:默认为(x, y]
,我们需要[x, y)
。