【问题标题】:Merging data frame rows in R with dplyr将 R 中的数据框行与 dplyr 合并
【发布时间】:2019-01-09 16:02:47
【问题描述】:

我有一个包含 4 列数据的数据框:url IDurltitlepageviews,如下所示:

    ID          url  title pageviews
1 /12/      /url-1/ Page 1      1123
2 /13/      /url-2/ Page 2      4432
3 /13/ /url-2/?test Page 2         6
4 /14/      /url-4/ Page 4      4242

我花了很长时间寻找如何合并具有相同ID 的行(页面)并将pageviews 相加。我最终得到了这段代码,使用 dplyr:

df_merged <- df %>% group_by(ID) %>% summarise_at(c("pageviews"), sum)

但是,它会创建另一个只有 ID 和综合浏览量的数据框。我想实现一个完整的数据框,再次使用urltitle。像这样的:

    ID          url  title pageviews
1 /12/      /url-1/ Page 1      1123
2 /13/      /url-2/ Page 2      4438
3 /14/      /url-4/ Page 4      4242

我怎样才能达到这个结果?

这是我的数据框:

df <- data.frame(ID = c("/12/", "/13/", "/13/", "/14/"), 
             url = c("/url-1/", "/url-2/", "/url-2/?test", "/url-4/"),
             title = c("Page 1", "Page 2", "Page 2", "Page 4"),
             pageviews = c(1123, 4432, 6, 4242))

【问题讨论】:

  • df %&gt;% group_by(ID) %&gt;% summarise(sum = sum(pageviews)) ?不知道你是如何决定保留/url-2/ 而不是/url-2/?testID 13。
  • 我没有,这是我想要返回的示例。但是Curt F. 建议使用first()(很好的答案)

标签: r dataframe dplyr rows


【解决方案1】:

一种方法是这样的:

df_merged <- 
       df %>% 
       group_by(ID, title) %>% 
       summarise(url = first(url),
                 total_pageviews = sum(pageviews)
                )

您需要考虑 R 应该如何知道在第 2 页的情况下 url 的所需输出是 /url-2/ 而不是 /url-2/?test 或其他东西。在这里,我只是随意决定放在那里的值是组中出现的first()值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 2018-06-25
    • 2021-08-03
    相关资源
    最近更新 更多