如何在R中直接基于≥100和≥75的阈值创建分类列?
R语言:直接使用≥100/≥75阈值创建新列的实现方法
问题背景
现有如下R语言data.frame数据集:
my_df <- data.frame( b1 = c(2, 6, 3, 6, 4, 2, 1, 9, NA), b2 = c(100, 4, 106, 102, 6, 6, 1, 1, 7), b3 = c(75, 79, 8, 0, 2, 3, 9, 5, 80), b4 = c(NA, 6, NA, 10, 12, 8, 3, 6, 2), b5 = c(2, 12, 1, 7, 8, 5, 5, 6, NA), b6 = c(9, 2, 4, 6, 7, 6, 6, 7, 9), b7 = c(1, 3, 7, 7, 4, 2, 2, 9, 5), b8 = c(NA, 8, 4, 5, 1, 4, 1, 3, 6), b9 = c(4, 5, 7, 9, 5, 1, 1, 2, NA), b10 = c(14, 2, 4, 2, 1, 1, 1, 1, 5))
需要创建名为NEW的新列,规则为:当b2≥100 或 b3≥75时取值"BLUE",否则取值"RED"。目前通过设置略低于目标值的阈值(99.9和74.9),使用tidyverse的case_when函数实现了需求,想确认是否可以直接使用≥100和≥75的阈值来完成该操作。
解决方案
当然可以直接使用≥100和≥75的阈值实现需求,完全不需要用略低的替代值。以下是两种常用实现方式:
1. Tidyverse 方案(case_when)
直接在条件中写入b2 >= 100 | b3 >=75即可,代码如下:
library(tidyverse) my_df <- my_df %>% mutate(NEW = case_when( b2 >= 100 | b3 >= 75 ~ "BLUE", TRUE ~ "RED" ))
2. Base R 方案(ifelse)
如果不想加载tidyverse包,也可以用base R的向量化判断快速生成新列:
my_df$NEW <- ifelse(my_df$b2 >= 100 | my_df$b3 >=75, "BLUE", "RED")
验证结果
执行上述代码后,查看NEW列的结果:
print(my_df$NEW) # 输出:[1] "BLUE" "BLUE" "BLUE" "BLUE" "RED" "RED" "RED" "RED" "BLUE"
完全符合规则:第1行(b2=100、b3=75)、第2行(b3=79)、第3行(b2=106)、第4行(b2=102)、第9行(b3=80)均标记为"BLUE",其余行标记为"RED"。
内容的提问来源于stack exchange,提问作者lizzy
相关产品推荐
相关产品推荐

