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

分组tibble中从多列提取唯一值生成列表列的实现方法

解决方案

你可以直接使用dplyr的分组操作+across选择器实现需求,不需要提前做复杂的预处理,参考代码如下:

library(tidyverse)

result <- exemplar %>%
  group_by(group) %>%
  mutate(unique = list(
    c(across(starts_with("char")) %>% unlist(), # 若实际列名以大写C开头,替换为starts_with("C")
      unlist(extra)) %>% 
      unique() %>% 
      .[. != ""]
  )) %>%
  ungroup()

运行后得到的result和你给出的示例输出完全一致。

原代码报错原因

  1. 第一段代码报错是因为select(.)取的是整个数据集而非分组后的子集,且select返回的是数据框,无法直接回收适配分组的5行长度
  2. 第二段代码报错是因为pmap是按行遍历,不符合你要取分组全局所有值的需求,且pmap_chr要求返回单个字符,你需要的是列表列,类型不匹配

常见疑问解答

  • 是否需要提前unlist extra列?不需要,在分组运算内对当前组的extra列执行unlist即可,不会影响其他分组数据
  • 不固定数量的char列是否需要提前构建选择向量?不需要,starts_with()选择器会自动匹配所有符合命名规则的列,不管列数是2、4、6都可以直接适配
  • 是否需要分多步操作删除冗余列?不需要,上述代码是单步mutate生成目标列,不会产生冗余中间列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:45:02