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

如何在R语言中将带序列的Tooth值拆分为多列?

R语言拆分序列值为多列解决方案

针对你需要将带范围序列的Tooth列拆分为多列的需求,这里提供基于tidyverse工具包的实现方法,适配-和:两种分隔符,同时处理单个数值的情况:

1. 构造原始数据

首先还原你的输入数据:

library(tidyverse)

# 原始数据框
df <- tibble(
  patient = c("qw", "lo", "wq", "fg"),
  Tooth = c("1-5", "4-5", "15", "16:24")
)

2. 数据处理步骤

通过以下代码完成序列拆分与列生成:

df_processed <- df %>%
  # 统一分隔符:将冒号替换为横杠
  mutate(Tooth_clean = str_replace(Tooth, ":", "-")) %>%
  # 拆分起始/结束值,单个值时自动填充右侧为空
  separate(Tooth_clean, into = c("start", "end"), sep = "-", fill = "right") %>%
  # 转换为数值类型,单个值时结束值等于起始值
  mutate(
    start = as.numeric(start),
    end = as.numeric(end) %||% start
  ) %>%
  # 按行生成序列,保存为列表列
  rowwise() %>%
  mutate(seq_list = list(seq(start, end))) %>%
  # 将列表列拆分为多列,仅保留前两列
  unnest_wider(seq_list, names_sep = "") %>%
  rename(Col1 = seq_list1, Col2 = seq_list2) %>%
  # 将NA替换为空字符串(可选,根据显示需求调整)
  mutate(across(Col1:Col2, ~replace_na(.x, ""))) %>%
  # 保留需要的列
  select(patient, Tooth, Col1, Col2)

3. 输出结果

运行后得到的结果与你期望的目标表格一致:

# A tibble: 4 × 4
  patient Tooth Col1  Col2 
  <chr>   <chr> <chr> <chr>
1 qw      1-5   1     2    
2 lo      4-5   4     5    
3 wq      15    15    ""   
4 fg      16:24 16    17   

关键逻辑说明

  • 统一分隔符:将:替换为-,避免重复处理不同分隔规则
  • 单个值兼容:通过fill="right"和%||%运算符,保证单个数值的序列仅包含自身
  • 序列拆分:利用rowwise()按行生成序列,再通过unnest_wider拆分为多列,按需保留前N列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:57:18