如何基于数值范围对R语言数据框变量分组并生成新列
问题解决方案
你的代码核心错误在于第二个条件的逻辑运算符使用错误:你用了|(逻辑或),这会把所有b9 >=4 或者 b9 <=7的行都标记为white,这会直接覆盖后续b9 >=9的判断(比如b9=9满足>=4,会被先匹配为white而非green)。正确的区间判断应该用&(逻辑与)来表示4到7之间(包含边界)。
修正后的代码
library(dplyr) # 保留你定义的阈值变量 greater_threshold <- 2 greater_threshold1 <- 4 greater_threshold2 <- 7 greater_threshold3 <- 9 my_df1 <- my_df %>% mutate(NEW = case_when( b9 <= greater_threshold ~ "yellow", b9 >= greater_threshold1 & b9 <= greater_threshold2 ~ "white", # 替换|为& b9 >= greater_threshold3 ~ "green" ))
更简洁的写法(使用dplyr内置函数)
可以用between()函数直接指定区间,让逻辑更清晰:
my_df1 <- my_df %>% mutate(NEW = case_when( b9 <= 2 ~ "yellow", between(b9, 4, 7) ~ "white", b9 >= 9 ~ "green" ))
运行以上代码后,生成的my_df1的NEW列会完全符合你的预期结果。
内容的提问来源于stack exchange,提问作者lizzy
相关产品推荐
相关产品推荐

