子集数据框,其中日期在R中日期向量的x天内

use*_*199 6 r date subset dataframe

我有一个日期矢量,例如

dates <- c('2013-01-01', '2013-04-02', '2013-06-10', '2013-09-30')
Run Code Online (Sandbox Code Playgroud)

以及包含日期列的数据框,例如

df <- data.frame(
                'date' = c('2013-01-04', '2013-01-22', '2013-10-01', '2013-10-10'),
                'a'    = c(1,2,3,4),
                'b'    = c('a', 'b', 'c', 'd')
                )
Run Code Online (Sandbox Code Playgroud)

我希望对数据框进行子集化,使其仅包含日期在"日期"向量中的任何日期之后不到5天的行.

即初始数据框看起来像这样

date       a b 
2013-01-04 1 a
2013-01-22 2 b
2013-10-01 3 c
2013-10-10 4 d
Run Code Online (Sandbox Code Playgroud)

查询后我只剩下第一排和第三排(自2013-01-04起2013年1月1日起5天内2013-10-01在2013-09-30的5天内)

有谁知道最好的方法吗?

提前致谢

edd*_*ddi 5

使用data.tableroll 很简单(也很快):

library(data.table)
dt = data.table(df)

# convert to Date (or IDate) to have numbers instead of strings for dates
# also set the key for dates for the join
dt[, date := as.Date(date)]
dates = data.table(date = as.Date(dates), key = 'date')

# join with a roll of 5 days, throwing out dates that don't match
dates[dt, roll = 5, nomatch = 0]
#         date a b
#1: 2013-01-04 1 a
#2: 2013-10-01 3 c
Run Code Online (Sandbox Code Playgroud)

  • +1基地R正在变得"弃用"btw :-) (2认同)