我正在基于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天间隔内重复发生的特定事件
答案 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