【问题标题】:Merging multiple rows per group into one while merging only some column data in R将每组的多行合并为一个,同时仅合并R中的一些列数据
【发布时间】:2019-10-19 12:33:11
【问题描述】:

我在 Reddit 上有一组帖子和 cmets 的数据行和列,其中一行代表一个帖子,它是评论。由于一篇帖子可能包含多个 cmets,因此我有具有相同 ID(帖子 ID)和不同评论 ID 的行。我想将具有相同 id 的行合并为一行,并在列中包含所有不同的评论 id - 'comment id' 用逗号分隔。而且由于帖子数据(标题、正文等)是重复的(如附图所示),我不需要将它们合并为每行仅出现一次。

![重复行][1] 1

我可以合并以逗号分隔的相关列的评论信息,但我不知道如何获得不需要合并的重复帖子信息的一次出现。

all_reddits <- all_posts_and_comments %>%
  group_by(id) %>%
  summarise(
    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=",")
  )

我已经尝试过 R: dplyr 的 summarise_all() 和 summarise_at() ,但我不断收到错误。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    我相信您可以为每个 post 列使用像 post_datapoint_xyz = first(post_datapoint_xyz) 这样的摘要语句来解决您的问题。

    也可以将所有 post 列简单地包含到您的 group_by 列表中:)
    // 更新:你可以把它写成这样来快速做到这一点

    all_reddits <- all_posts_and_comments %>%
      group_by_at(vars(starts_with('post_'))) %>%
      summarise(...)
    

    summarise_allsummarise_at 不会让您走得太远,因为您想将两个不同的函数(粘贴和第一个)应用于两组不同的变量(cmets 和帖子)并且两个 summarise_* 函数不不支持。
    this thread 中有很多建议,但对于您的用例来说,这些建议可能有点过头了...


    但是,附带说明一下:仅单独连接每个评论列可能对自己没有太大帮助,因为这样做会失去它们之间的关系。 (想象一下其中一个包含逗号的 cmets,您将无法反转此摘要。)

    如果您真的想在结果中保留完整的评论数据,您可以考虑仅创建所有 cmets 的 一个摘要列,并将它们存储为列表或嵌套 df。

    //更新:如果你想这样做,你可以像这样使用the nest function

    all_reddits <- all_posts_and_comments %>%
      nest(starts_with('comment_'), .key = 'comments')
    

    如果您想稍后取消这些 cmets,unnest 函数可以提供帮助。

    all_posts_and_comments.2 <- all_reddits %>%
      unnest(comments)
    

    【讨论】:

    • 谢谢!我试过了,它有效,我得到了我想要的输出。同样关于你提到的第二点,是的!但是你能给我一个例子来说明如何做到这一点吗?我是 R 的新手,找不到你在说什么。
    • 嘿,内兹,很高兴听到这个消息。我在我的答案中添加了两个更新,以帮助您到达那里:) 我的一般建议是将数据拆分为一个包含帖子信息的数据框和一个包含 cmets 并引用 post_id 的单独数据框,但是如果如果您真的想将所有功能合二为一,那么 nest 函数应该可以为您解决问题。
    猜你喜欢
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 2021-08-29
    • 2021-09-10
    相关资源
    最近更新 更多