【发布时间】:2018-05-29 23:20:56
【问题描述】:
我必须查看值列表是否在值范围内,然后分配特定值。我想找到一种方法来做到这一点,而不必使用嵌套的 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
【问题讨论】:
-
如果您的 lower_comp 和 upper_comp 列始终采用相同的值,则有
library(data.table); setDT(df); df[comparison_table, on=.(value >= lower_value, value < upper_value), new_value := i.new_value ]
标签: r string dataframe data.table subset