丢弃在特定日期时间间隔重复的值

时间:2018-07-19 16:30:49

标签: r dataframe duplicates

我正在基于14天的重复间隔对数据帧进行重复数据删除,这意味着 如果b列中的值在14天之内重复出现,那么我需要丢弃重复项,如果不是,则保留所有值

这是数据框的外观:

date    event
2016-01-17  aa
2016-01-18  bb
2016-01-19  cc
2016-01-20  dd
2016-01-17  ee
2016-01-18  ff
2016-01-19  aa
2016-01-20  bb
2016-10-21  cc
2016-10-22  dd
2016-10-23  ee

这里aa和bb事件在14天之内重复发生,因此需要删除两个重复的值

所需结果:

date    event
2016-01-17  aa
2016-01-18  bb
2016-01-19  cc
2016-01-20  dd
2016-01-17  ee
2016-01-18  ff
2016-10-21  cc
2016-10-22  dd
2016-10-23  ee

我可以使用:

df<- df[order(df[,'date'],-df[,'event']),]
df = df[!duplicated(df$date),]

但这只会触发在同一天而不是在14天间隔内重复发生的特定事件

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

library(data.table)

# convert to data table
setDT(df)

## create groups based on 14 days interval
df$group <- cumsum(ifelse(difftime(df$date,
                                      shift(df$date, fill = df$date[1]), 
                                      units = "days") >= 14 ,1, 0)) + 1
# get unique values
df = df[,unique(.SD, by='event'), group][,.(date, event)]

print(df)
         date event
1: 2016-01-17    aa
2: 2016-01-18    bb
3: 2016-01-19    cc
4: 2016-01-20    dd
5: 2016-01-17    ee
6: 2016-01-18    ff
7: 2016-10-21    cc
8: 2016-10-22    dd
9: 2016-10-23    ee