如何简化R语言中mutate函数的重复条件判断?
简化重复条件的case_when写法
你的示例数据框:
df <- data.frame( col1 = c(4,5,6,11), col2 = c('b','b','c', 'b') )
原mutate代码重复了多次col2 == 'b',可以通过以下几种方式简化:
方法1:嵌套case_when
把col2 == 'b'作为外层条件,内层只处理col1的分支判断,避免重复书写:
library(dplyr) df2 <- df %>% mutate(col3 = case_when( col2 == 'b' ~ case_when( col1 == 4 ~ 10, col1 == 5 ~ 15, col1 == 11 ~ 20 ), col2 == 'c' & col1 == 6 ~ 7 ))
方法2:用recode处理映射
当col2 == 'b'时,col1和col3是明确的键值映射,用recode可以让代码更简洁:
df2 <- df %>% mutate(col3 = case_when( col2 == 'b' ~ recode(col1, `4` = 10, `5` = 15, `11` = 20), col2 == 'c' & col1 == 6 ~ 7 ))
方法3:使用映射表(适合复杂场景)
如果映射规则较多或需要频繁修改,建议创建单独的映射表,通过left_join实现匹配:
# 创建映射规则表 map_table <- tibble( col2 = c('b', 'b', 'b', 'c'), col1 = c(4, 5, 11, 6), col3 = c(10, 15, 20, 7) ) df2 <- df %>% left_join(map_table, by = c("col1", "col2"))
以上三种方法都能达到和原代码相同的输出结果,且避免了重复书写col2 == 'b'的条件,可根据实际场景选择最合适的方式。
内容的提问来源于stack exchange,提问作者karuno
相关产品推荐
相关产品推荐

