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

如何用tidyverse将R数据框按分隔符拆分列并转长格式?

问题描述

现有R数据框foo:

foo <- data.frame(
  key=c('one', 'two', 'three'), val=c('a', 'b|c', 'd|e|f'),
  stringsAsFactors = F)

运行后显示:

> foo
    key   val
1   one     a
2   two   b|c
3 three d|e|f

需要将其转换为如下长格式数据框bar:

bar <- data.frame(key=c('one', 'two', 'two', 'three', 'three', 'three'),
                  val=c('a', 'b', 'c', 'd', 'e', 'f'),
                  stringsAsFactors = F)

运行后显示:

> bar
    key val
1   one   a
2   two   b
3   two   c
4 three   d
5 three   e
6 three   f

要求用tidyverse工具包实现,核心逻辑是按竖线(|)拆分val列(拆分后列数不固定),再转为长格式。

解决方案

使用tidyr包的separate_rows()函数可以一步完成需求,代码如下:

library(tidyverse)

# 转换为目标长格式数据框
bar <- foo %>%
  separate_rows(val, sep = "\\|")

关键说明

  • separate_rows()会自动将指定列按分隔符拆分,同时复制对应行的其他列数据,直接生成长格式结果;
  • 因为竖线|属于正则表达式的特殊字符,所以需要用\\|作为分隔符参数(双反斜杠用于转义)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 00:30:44