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

如何拆分含不等数量元素的列并重塑R数据框

如何拆分含不等数量元素的列并重塑R数据框

嗨,这个需求其实挺常见的,我给你分享几个实用的解决方案,你可以根据自己的习惯选择:

方法一:用tidyverse工具包(最简洁直观)

tidyverse里的separate_rows()函数专门处理这类场景——它能把包含分隔符的列拆分成多行,同时自动重复对应行的其他列内容,完美匹配你的需求。

先看代码:

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

# 你的原始数据
clusterNo <-c("cluster1", "cluster2", "cluster3")
membership <-c("sample1, sample2, sample3", "sample4, sample5", "sample6, sample7, sample8, sample9")
df <-data.frame(clusterNo, membership, stringsAsFactors = FALSE)

# 拆分并重塑数据框
df2 <- df %>% separate_rows(membership, sep = ", ")

# 查看结果
df2

运行后你就能得到和目标完全一致的df2,每个样本单独一行,对应所属的cluster编号。

方法二:用Base R实现(无需额外包)

如果不想加载第三方包,用Base R也能搞定,思路是先把每个cluster的样本拆成列表,再重复cluster编号对应次数,最后组合成新数据框:

# 原始数据
clusterNo <-c("cluster1", "cluster2", "cluster3")
membership <-c("sample1, sample2, sample3", "sample4, sample5", "sample6, sample7, sample8, sample9")
df <-data.frame(clusterNo, membership, stringsAsFactors = FALSE)

# 拆分membership为列表
split_members <- strsplit(df$membership, ", ")

# 重复clusterNo对应次数,拆分样本为向量
new_cluster <- rep(df$clusterNo, sapply(split_members, length))
new_membership <- unlist(split_members)

# 组合成目标数据框
df2 <- data.frame(clusterNo = new_cluster, membership = new_membership)

# 查看结果
df2

这个方法同样能得到你想要的结果,适合习惯Base R的用户。

备注:内容来源于stack exchange,提问作者ptenax

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 15:54:50