在R中批量将以act1开头的数值列转换为分类字符列
问题解决与批量处理方案
首先修正你之前的recode报错
你之前的代码语法错误,多个值对应同一标签时,需要用c()包裹这些值,正确的单列写法应该是:
mutate(act1_001 = recode(act1_001, c(1,2,3,4) = "leisure", c(5,6,7) = "work", c(0,8,9) = "home"))
报错是因为你没有用c()包裹多值,且未完成所有分组定义、闭合括号。
批量处理以"act1"开头的列
完全可以用starts_with("act1")或matches("^act1")批量选择目标列,结合dplyr的across()函数实现批量转换,以下是两种可行方案:
方案1:用recode()批量转换
library(dplyr) diary00 <- diary00 %>% mutate(across(starts_with("act1"), ~ recode(., c(1,2,3,4) = "leisure", c(5,6,7) = "work", c(0,8,9) = "home")))
starts_with("act1")会选中所有列名以"act1"开头的列;across()对每一列应用recode规则,转换后列自动变为字符类型;- 若想用正则匹配,把
starts_with("act1")替换为matches("^act1")即可,效果一致。
方案2:用case_when()批量转换(可读性更强)
如果分组逻辑复杂,case_when的表述更直观:
library(dplyr) diary00 <- diary00 %>% mutate(across(starts_with("act1"), ~ case_when( . %in% c(1,2,3,4) ~ "leisure", . %in% c(5,6,7) ~ "work", . %in% c(0,8,9) ~ "home", TRUE ~ NA_character_ # 可选:处理不在分组内的异常值 )))
内容的提问来源于stack exchange,提问作者Victoria
相关产品推荐
相关产品推荐

