【问题标题】:Keep only the earliest occurence of overlapping data只保留最早出现的重叠数据
【发布时间】:2018-06-27 23:52:45
【问题描述】:

我有一个包含因子变量 obs、日期、组 ID、所有者 ID、损坏类型和应用类型的数据集。

样本数据:

 obs   Date GroupID Owner ID    Damage Type Type
 1   5/8/2012   268dun56    125 front   Initial
 2   6/28/2012  924bndg32   126 driver front    Completed
 3   5/1/2015   963pkj23    127 passenger rear  Completed
 4   3/25/2016  9647kjh25   128 windshield  Initial
 5   3/26/2016  9647kjh25   128 windshield  Initial

基于此,我知道 obs 5 和 6 是同一辆车,因为 group id 和 owner id 是唯一标识符。我想删除所有重复的条目,但最早出现的除外,但我不确定如何做到这一点。实际数据集来自汽车经销商超过 3 年,因此手动删除行不是一种选择。 我尝试了几种删除重复条目的方法,但是由于条目并不完全相同,因此没有任何效果。

【问题讨论】:

    标签: r duplicates


    【解决方案1】:

    您可以仅在 GroupID 和 OwnerID 列上使用duplicated 来执行此操作。

    duplicated(df[,3:4])
    [1] FALSE FALSE FALSE FALSE  TRUE
    
    df = df[!duplicated(df[,3:4]),]
    df
      obs      Date   GroupID OwnerID     DamageType      Type
    1   1  5/8/2012  268dun56     125          front   Initial
    2   2 6/28/2012 924bndg32     126   driver front Completed
    3   3  5/1/2015  963pkj23     127 passenger rear Completed
    4   4 3/25/2016 9647kjh25     128     windshield   Initial
    

    【讨论】:

    • 根据“第一次出现”的含义,可能需要在调用 duplicated() 之前考虑日期。
    【解决方案2】:

    您可以使用dplyr::slice 仅选择在GroupIDOwner ID 分组后的第一行。我建议首先arrange 您在Date 上的数据,以便您始终获得最旧的数据(最先出现的数据)。

    解决方案如下:

    library(dplyr)
    
    df %>% mutate(Date = as.POSIXct(Date, format = "%m/%d/%Y")) %>%
      group_by(GroupID, Owner.ID) %>%
      arrange(Date) %>%
      slice(1) %>% as.data.frame()
    #   obs       Date   GroupID Owner.ID    Damage.Type      Type
    # 1   1 2012-05-08  268dun56      125          front   Initial
    # 2   2 2012-06-28 924bndg32      126   driver front Completed
    # 3   3 2015-05-01  963pkj23      127 passenger rear Completed
    # 4   4 2016-03-25 9647kjh25      128     windshield   Initial
    

    数据:

    df<-read.table(text="
    obs   Date     GroupID 'Owner ID'    'Damage Type' Type
    1   5/8/2012   268dun56    125 front   Initial
    2   6/28/2012  924bndg32   126 'driver front'    Completed
    3   5/1/2015   963pkj23    127 'passenger rear'  Completed
    4   3/25/2016  9647kjh25   128 windshield  Initial
    5   3/26/2016  9647kjh25   128 windshield  Initial",
    header=TRUE, stringsAsFactor = FALSE)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      相关资源
      最近更新 更多