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

从data.frame行提取字符列表值并重塑数据

解决R语言数据重塑:拆分字符列并保留唯一(id,x)对

嘿,我来帮你搞定这个数据格式转换的需求!你想要把每行带逗号分隔字符的x列拆分成单独行,然后保留唯一的(id,x)配对对吧?这里有两种简单的方法可以实现:

方法一:用tidyverse工具包(推荐,代码更简洁直观)

tidyverse里的tidyr::separate_rows可以直接帮你拆分字符列并展开成多行,再配合dplyr::distinct去重就搞定了:

# 先安装并加载tidyverse(如果还没装的话)
# install.packages("tidyverse")
library(tidyverse)

# 你的原始数据
dat <- data.frame(id = c(rep('a',2),rep('b',2),'c'), x = c('f,o','f,o,o','b,a,a,r','b,a,r','b,a'), stringsAsFactors = F)

# 拆分+去重一步到位
dat2 <- dat %>%
  separate_rows(x, sep = ",") %>%  # 按逗号拆分x列,把每个字符单独成一行
  distinct(id, x)  # 保留唯一的(id,x)组合

# 查看结果
dat2

运行后输出的结果就是你想要的:

id x
1  a f
2  a o
3  b b
4  b a
5  b r
6  c b
7  c a

方法二:Base R实现(不用额外安装包)

如果你不想加载第三方包,用Base R的strsplit和unique也能实现:

# 你的原始数据
dat <- data.frame(id = c(rep('a',2),rep('b',2),'c'), x = c('f,o','f,o,o','b,a,a,r','b,a,r','b,a'), stringsAsFactors = F)

# 拆分x列成字符列表
split_x <- strsplit(dat$x, ",")
# 生成对应每个拆分字符的id列表(每个id重复对应拆分后的元素个数)
id_list <- mapply(rep, dat$id, sapply(split_x, length))
# 组合成临时数据框
temp_df <- data.frame(id = unlist(id_list), x = unlist(split_x), stringsAsFactors = FALSE)
# 去重得到最终结果
dat2_base <- unique(temp_df)

# 查看结果
dat2_base

这个方法也能得到和上面完全一致的结果~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:55:05