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

R语言dplyr按ID分组拼接Path列未得到预期结果?

代码存在的核心问题

你的代码有两处关键错误,导致无法得到预期结果:

  • 函数选型错误:mutate()的逻辑是保留数据集全部原始行,为每一行计算列值,不会做分组后的行折叠。你需要的是每个分组(每个ID)仅返回1行聚合结果,应该使用分组聚合函数summarise()而非mutate()。
  • paste()参数使用错误:sep参数的作用是设置多个传入向量之间的拼接分隔符,要把单个向量里的多个元素折叠拼接成一个字符串,必须使用collapse参数指定元素间的分隔符。你原代码里仅给paste()传入了Path一个向量,设置sep参数完全不会生效,不会把同组的多个Path值合并。

另外你的分组逻辑遗漏了Name字段:目标输出需要保留Name列,且Name与ID是一一对应的绑定关系,仅按ID分组可能在同ID对应不同Name时出现随机取值的异常。

修正后的可运行代码
library(dplyr)

df <- df |>
  group_by(Name, ID) |>
  summarise(
    pages = paste(Path, collapse = ", "),
    .groups = "drop"
  )

代码说明:

  • 共同按Name、ID分组,保证聚合后两列的取值对应关系准确
  • summarise()会将每个分组折叠为单行结果,符合输出要求
  • paste()使用collapse = ", "参数,会把同组下所有Path值按逗号加空格的格式拼接为单个字符串
  • 增加.groups = "drop"参数,聚合完成后自动解除分组,避免后续数据处理受残留分组属性影响

运行以上代码后,将得到和你预期完全一致的输出结果:

Name|ID|pages
Test|1|/home, /service
Test|2|/about
Test|3|/about, /service, /contact

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 20:18:30