我有一个数据集,其中包含因子变量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年的时间,因此不能手动删除行。 我尝试了几种删除重复条目的方法,但是由于条目并不完全相同,因此没有任何效果。
答案 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::slice
和GroupID
分组之后,您可以使用Owner 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)