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

部分键存在多值时如何使用tidyr::pivot_wider实现字符值拼接

解决方案

方案1:直接分组聚合(最简便,tidyverse生态)

你要实现的按ColA分组拼接ColB的需求,直接用dplyr的分组汇总逻辑即可,不需要做宽长转换:

library(tidyverse)

df <- data.frame(ColA=c("A", "B", "B", "C"), ColB=letters[23:26])

df %>%
  group_by(ColA) %>%
  summarise(ColB = paste(ColB, collapse = ""))

运行后直接得到你期望的两列结果:

ColA ColB
1    A    w
2    B    xy
3    C    z

方案2:使用pivot_wider实现(需生成宽格式时使用)

values_fn完全支持paste类字符处理函数,你只需要通过匿名函数指定collapse参数,将同组的多个字符值拼接为单个字符串即可:

df %>%
  pivot_wider(
    names_from = ColA,
    values_from = ColB,
    values_fn = ~ paste(.x, collapse = "")
  )

运行后得到宽格式结果,无警告也不会生成列表列:

# A tibble: 1 × 3
  A     B     C    
  <chr> <chr> <chr>
1 w     xy    z    

方案3:data.table实现(适合大数据量场景)

如果处理的数据集较大,可以用data.table的语法实现,运行效率更高:

library(data.table)
setDT(df)[, .(ColB = paste(ColB, collapse = "")), by = ColA]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:45:09