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

拆分折叠列至多行并保留分组信息(R语言tidyr场景)

解析带子分组的折叠ID列,生成长格式数据框

原始数据如下:

mydf <- data.frame(group=LETTERS[1:5], code=101:105, ids=c('g1:id1,id2,id3\ng2:id4,id5',
                                                           'id6,id7,id8,id9',
                                                           'g1:id10,id11\ng3:id12',
                                                           'g2:id13,id14',
                                                           'id15'))

可以通过tidyr和dplyr的组合操作,分三步完成解析:

library(tidyr)
library(dplyr)

mydf_new <- mydf %>%
  # 按换行符拆分每个ids条目,得到子分组对应的ID块(无分组的行保留原ID列表)
  separate_longer_delim(ids, delim = "\n") %>%
  # 拆分subgroup和ID列表,无冒号的行自动填充subgroup为NA
  separate(ids, into = c("subgroup", "id_list"), sep = ":", fill = "left") %>%
  # 按逗号拆分ID列表为单独行,并重命名列
  separate_longer_delim(id_list, delim = ",") %>%
  rename(id = id_list) %>%
  select(group, code, id, subgroup)

# 输出结果
mydf_new

操作说明

  • separate_longer_delim(ids, delim = "\n"):将单元格内用换行分隔的子分组块拆分为独立行,比如A组的两个子分组会拆成两行。
  • separate(..., fill = "left"):针对带冒号的块拆分出子分组和ID列表,没有冒号的条目(如B、E组)会把子分组设为NA,确保所有行都能匹配列结构。
  • separate_longer_delim(id_list, delim = ","):把每个ID列表按逗号拆分为单独行,实现最终的长格式转换。

运行后得到的结果与期望完全一致:

> mydf_new
   group code   id subgroup
1      A  101  id1       g1
2      A  101  id2       g1
3      A  101  id3       g1
4      A  101  id4       g2
5      A  101  id5       g2
6      B  102  id6     <NA>
7      B  102  id7     <NA>
8      B  102  id8     <NA>
9      B  102  id9     <NA>
10     C  103 id10       g1
11     C  103 id11       g1
12     C  103 id12       g3
13     D  104 id13       g2
14     D  104 id14       g2
15     E  105 id15     <NA>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 05:38:19