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

在R语言中重塑DataFrame:拆分单元格多值实现行展开

拆分数据框中分号分隔列的简便方法

哈哈,这种把分隔符分隔的列拆成多行的需求真的太常见了!完全不用复杂方案,R里有好几种超省心的方法,给你分享两个最常用的:

方法一:用tidyverse的separate_rows()(最直接)

这是专门为这种场景设计的函数,一步到位:

# 先加载tidyverse包(如果没装先运行install.packages("tidyverse"))
library(tidyverse)

# 直接拆分col2列,分号作为分隔符
result <- separate_rows(df, col2, sep = ";")

这个函数会自动把col2里用分号分隔的内容拆成单独的行,同时保留col1对应的取值,完全匹配你想要的结果!

方法二:用str_split() + unnest_longer()

如果你习惯处理列表列,也可以用这个组合:

library(tidyverse)

result <- df %>%
  # 把col2拆成列表形式,每个元素是拆分后的字符向量
  mutate(col2 = str_split(col2, ";")) %>%
  # 把列表列展开成多行
  unnest_longer(col2)

这个方法灵活性更高,要是之后还需要对拆分后的列表做其他操作,用这个会更方便。

方法三:Base R 原生方法(不用额外装包)

要是不想加载第三方包,用Base R也能轻松实现:

# 先拆分col2列得到列表
split_col <- strsplit(df$col2, ";")
# 生成结果数据框
result <- data.frame(
  col1 = rep(df$col1, sapply(split_col, length)),
  col2 = unlist(split_col)
)

原理就是先拆分得到每个元素的长度,然后重复col1对应次数,再把拆分后的内容展开合并。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:09:51