代码之家  ›  专栏  ›  技术社区  ›  Dee V

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

  •  0
  • Dee V  · 技术社区  · 6 年前

    我正在做一个基于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
    

    这里,事件a a和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 回复  |  直到 6 年前
        1
  •  1
  •   YOLO    6 年前

    您可以执行以下操作:

    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