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

R语言tidyverse下单列多分隔数据转长格式的简洁实现方案求教

你可以使用tidyverse生态中专门处理这类拆分场景的函数实现更简洁的写法,两种常用方案如下:

方案1:tidyr 1.3.0+ 推荐写法

用separate_longer_delim()直接完成分隔符拆分转行,仅需3步即可匹配你需要的输出:

library(tidyverse)

df %>%
  # 按分号拆分data列,每个元素单独占一行
  separate_longer_delim(data, delim = ";") %>%
  # 重命名拆分后的结果列为value
  rename(value = data) %>%
  # 按id分组生成每个元素的序号
  group_by(id) %>%
  mutate(data_number = as.character(row_number())) %>%
  ungroup()

方案2:兼容旧版本tidyr的写法

如果你的tidyr版本低于1.3.0,用字符串拆分+列表展开的组合实现:

df %>%
  # 将data列的字符串按分号拆分为列表
  mutate(data = str_split(data, ";")) %>%
  # 展开列表列,同时生成元素位置序号
  unnest_longer(data, indices_to = "data_number") %>%
  # 重命名结果列
  rename(value = data)

两种方案都不需要提前预估拆分后的最大列数,也不需要额外做宽转长、过滤空值的操作,代码可读性和运行效率都更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:39:03