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

将tibble中的一列拆分为多列以完成数据清洗

拆分合并变量列为多列的解决方案

针对你提供的非整洁数据,我们可以用tidyverse里的separate()函数结合正则表达式,精准拆分variable列中的section、题号、子题号和问题内容。

具体代码实现

library(tidyverse)

tbl <- tibble(
  variable = c("a01_name", "a02_address", "a3_phone_number",
               "b1a_total_income", "b01b_no_of_cars")
)

# 拆分列并处理格式
result_tbl <- tbl %>%
  separate(variable, 
           into = c("section", "question_no", "sub_question_no", "question"),
           sep = "^([ab])(\\d+)([a-z]?)_",
           remove = TRUE,
           fill = "right") %>%
  mutate(
    # 把题号转为整数,自动去除前导零
    question_no = as.integer(question_no),
    # 把子题号为空的替换成NA
    sub_question_no = ifelse(sub_question_no == "", NA, sub_question_no)
  )

# 查看结果
result_tbl

代码说明

  1. 正则表达式^([ab])(\\d+)([a-z]?)_的匹配逻辑:
    • ^([ab]):抓取开头的单个字母a/b,对应section列
    • (\\d+):抓取紧随其后的1位或多位数字,对应题号
    • ([a-z]?):抓取可选的单个小写字母(没有子题号则为空),对应子题号列
    • _:匹配分隔用的下划线,作为拆分标记
  2. fill = "right":确保没有子题号的行自动填充空值,后续统一转为NA
  3. 最后用mutate()调整数据类型和空值格式,让结果完全符合预期

运行后得到的result_tbl和你给出的desired_tbl完全一致。

内容的提问来源于stack exchange,提问作者SiH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:30:49