如何结合mutate、case_when与if_any实现多列条件判断生成新变量?
用mutate+case_when+if_any生成标记变量的正确写法
你的代码里if_any的语法逻辑有误,starts_with("string")是用来筛选目标列的,判断"等于a"的条件需要单独定义在if_any的函数参数里。以下是修正后的代码:
df <- data.frame(string1= c("a","b", "c"), string2= c("d", "a", "f"), string3= c("a", "d", "c"), id= c(1,2,3)) df <- df %>% mutate(cod = case_when( # 遍历所有以string开头的列,只要任意一列值为"a",就返回TRUE if_any(starts_with("string"), ~ .x == "a") ~ 1, # 所有列都不满足时的默认值,可根据需求改成NA或其他值 TRUE ~ 0 ))
代码说明
if_any(starts_with("string"), ~ .x == "a"):指定要检查的列(以string开头),对每列判断是否等于"a",只要任意一列满足就返回TRUEcase_when根据上述判断结果赋值:满足条件则cod=1,否则为0
运行后得到的df中,cod列结果为c(1,1,0),完全符合需求:第一行和第二行都有至少一个string列是"a",第三行没有。
内容的提问来源于stack exchange,提问作者ggg
相关产品推荐
相关产品推荐

