如何在R语言中基于两列生成指定规则的新class列?
解决方法:生成class新列的正确实现
原代码的问题
- 变量名错误:把列名
class_desc写成了class-desc,减号会被R识别为减法运算,导致语法错误 - 逻辑重复无效:第二层
ifelse的条件和第一层完全相同,无法覆盖新的场景 - 场景覆盖不全:没有处理
class_title为NA的情况,以及两列内容不相等的场景
正确代码实现
使用dplyr的case_when可以更清晰地覆盖所有需求场景:
library(dplyr) # 构造原始数据(模拟你的输入) data_R2 <- tibble( class_desc = c("class 1", "class 2", "class 4", NA), class_title = c("class 1", NA, "class 2", NA) ) # 生成class列 data_R2 <- data_R2 %>% mutate(class = case_when( # 两列内容相等时,取对应值 class_desc == class_title ~ class_desc, # 当class_title为NA时,取class_desc的值 is.na(class_title) ~ class_desc, # 其他所有情况(两列不等/都为NA)返回NA TRUE ~ NA_character_ ))
输出结果
运行后得到的结果完全符合你的期望:
class_desc class_title class <chr> <chr> <chr> 1 class 1 class 1 class 1 2 class 2 NA class 2 3 class 4 class 2 NA 4 NA NA NA
逻辑说明
- 优先判断两列内容是否一致,一致则直接取值
- 处理
class_title为空的情况,此时用class_desc填充 - 剩下的场景(两列内容不同且都不为空、或两列都为空)统一返回NA
内容的提问来源于stack exchange,提问作者Fella
相关产品推荐
相关产品推荐

