仅保留最早出现重叠数据的情况

时间:2018-06-22 18:48:39

标签: r duplicates

我有一个数据集,其中包含因子变量obs,日期,组ID,所有者ID,损坏类型和appt类型。

样本数据:

 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和obs 6是同一辆车,因为组ID和所有者ID是唯一的标识符。我想删除所有重复的条目,除了最早的条目,但不确定如何执行。实际的数据集来自汽车经销商超过3年的时间,因此不能手动删除行。 我尝试了几种删除重复条目的方法,但是由于条目并不完全相同,因此没有任何效果。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

dplyr::sliceGroupID分组之后,您可以使用Owner ID仅选择第一行。我建议您先在arrangeDate收集数据,以便始终获取最早的数据(最先出现的数据)。

解决方案将为:

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)