【问题标题】:How to merge duplicated rows如何合并重复的行
【发布时间】:2022-01-02 08:25:28
【问题描述】:

我有一个看起来像这样的数据框

Nicknames Names
Fonse, Fons Alfons
Fonse, Fonsi Alfons
Gustel, Gustl, Guste, August
Baldi Balthasar
Hausl, Baldi Balthasar
Flore, Flori Florian

我想将重复的行合并为:

Nicknames Names
Fonse, Fons,Fonse, Fonsi Alfons
Gustel, Gustl, Guste, August
Baldi, Hausl, Baldi Balthasar
Flore, Flori Florian

我能够创建副本的一个子集,但我不知道如何组合它们

nick2 <- subset(nick, any(duplicated(nick$Names)))

这是 csv 文件格式的数据 https://github.com/Garybertrand/nick

【问题讨论】:

    标签: r merge duplicates


    【解决方案1】:

    这应该可以解决您的问题

    library(data.table)
    library(dplyr)
    
    setDT(df)[, list(Nicknames = paste(Nicknames, collapse = ', ')), 
              by = c('Names')] %>%
      select(Nicknames,Names)
    
    

    【讨论】:

    • 为什么是%&gt;% and select?如果您在每组Names 中返回Nicknames,那么您已经选择了这两个变量。
    • 选择用于对列进行重新排序,没有选择部分 Names 将是第一列。如果列的顺序无关紧要,这是不必要的。我只是认为最终输出的列应该与原始 df 的顺序相同。
    【解决方案2】:

    您也可以使用基础 R。

    aggregate(Nicknames ~ Names, unique(df), paste, collapse = ", ")
    

    【讨论】:

      【解决方案3】:

      简短的tidyverse 解决方案是这样的:

      library(tidyverse)
      
      df %>% 
        group_by(Names) %>% 
        summarize(Nicknames = paste0(Nicknames, collapse = ", "))
      

      【讨论】:

        猜你喜欢
        • 2021-11-23
        • 2018-12-20
        • 2013-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-24
        相关资源
        最近更新 更多