将每组中的多行合并为一个,同时仅合并R中的某些列数据

时间:2019-10-19 12:33:11

标签: r dplyr

我在Reddit上有一组帖子和评论数据的行和列,其中一行代表一个帖子及其评论。由于一个帖子可以包含多个评论,因此我具有相同ID(帖子ID)和不同评论ID的行。我想将具有相同ID的行合并为一行,并在列中使用所有不同的注释ID-“注释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(),但是我一直遇到错误。

1 个答案:

答案 0 :(得分:0)

我相信您可以对每个 post 列使用诸如$dest = 'abc.zip'; $source = 'abc.zip'; $ftp = ftp_connect("ftp.example.com"); ftp_login($ftp, "username", "password"); ftp_put($ftp, $dest, $source, FTP_BINARY); ftp_close($ftp); 之类的摘要语句来解决您的问题。

还有一种方法是将所有 post 列简单地包含到您的post_datapoint_xyz = first(post_datapoint_xyz)列表中:)
//更新:您可以将其编写为

group_by

all_reddits <- all_posts_and_comments %>% group_by_at(vars(starts_with('post_'))) %>% summarise(...) summarise_all不会让您走到这里,因为您想将两个不同的函数(粘贴和第一个)应用于两个不同的变量组(注释和帖子),而两个{ {1}}函数不支持。
this thread中有很多建议,但是对于您的用例来说,这些建议可能会显得过份……


但是,请注意:您可能并没有通过单独连接每个注释列来帮自己一个忙,因为这样做会丢失它们之间的关系。 (想象其中一个包含逗号的评论,您将无法撤消此摘要。)

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

//更新:如果要执行此操作,可以像这样使用the nest function

summarise_at

如果您以后希望取消这些注释的嵌套,则summarise_*函数可以提供帮助。

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