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

在R中按组合并多行:仅合并评论列,保留唯一帖子信息

解决Reddit帖子与评论数据合并问题

嘿,我来帮你搞定这个数据合并的需求!你现在的问题是已经处理了评论相关列的合并,但没保留帖子的唯一信息,而且用summarise_all()/summarise_at()时因为没区分帖子和评论列的处理逻辑导致出错,下面给你两种可行的解决方案:

方案一:手动指定列处理逻辑

如果帖子列不多,你可以直接在summarise()里逐个指定帖子列取唯一值(用first()或者unique()都可以,因为同一帖子ID下的帖子信息是重复的,取第一个值就等于保留唯一值),同时继续合并评论列:

library(dplyr)

all_reddits <- all_posts_and_comments %>%
  group_by(id) %>%
  summarise(
    # 保留帖子相关字段的唯一值,这里假设你有title、body等字段,按需添加
    title = first(title),
    body = first(body),
    post_score = first(post_score),
    post_created_date = first(post_created_date),
    # 合并评论相关字段,这里用逗号分隔,你也可以换成原来的斜杠
    comment_id = paste(comment_id, collapse = ","),
    comment_author = paste(comment_author, collapse = ","),
    comment_body = paste(comment_body, collapse = ","),
    comment_score = paste(comment_score, collapse = ","),
    comment_created_date = paste(comment_created_date, collapse = ","),
    comment_link = paste(comment_link, collapse = ",")
  )

方案二:用across()批量处理(更简洁)

如果你的帖子列和评论列命名有规律(比如评论列都以comment_开头),可以用across()函数批量处理,不用逐个写列名,这也是dplyr 1.0.0版本后推荐的写法:

library(dplyr)

all_reddits <- all_posts_and_comments %>%
  group_by(id) %>%
  summarise(
    # 对所有非评论列(即帖子相关列)取第一个值
    across(-starts_with("comment_"), first),
    # 对所有评论列进行合并,用逗号分隔
    across(starts_with("comment_"), ~paste(., collapse = ","))
  )

补充说明:

  • 为什么用first()而不是unique()?因为同一帖子ID下的帖子信息理论上是完全重复的,first()效率更高;如果万一出现同一ID下帖子信息不一致的异常情况,你可以把first()换成paste(unique(.), collapse = ",")来保留所有不同值。
  • 你之前用summarise_all()出错是因为它会对所有列应用同一个函数,但帖子列需要取唯一值,评论列需要合并,逻辑不一样;summarise_at()如果没精准区分列组也会有同样问题,across()的灵活性正好解决这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:17:52