You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 17:27:44