仅查找从今天起过去3年内的数据点

时间:2017-03-19 02:48:26

标签: r subset

我有一个数据集,其中一列是Date。我需要根据过去三年中的所有日期对数据集进行子集化。

因此,如果我今天运行脚本,它只需要保留从今天开始不到三年的那些日期,如果我明天必须运行它,它将返回从明天开始不到三年的那些日期。 / p>

我的样本数据集如下:

df <- structure(list(TransactionDate = structure(c(1391472000, 1335225600, 
1405641600, 1332460800, 1420156800, 1401321600, 1445299200, 1305158400, 
1305158400, 1367366400), tzone = "UTC", class = c("POSIXct", 
"POSIXt"))), .Names = "TransactionDate", row.names = c(NA, -10L
), class = "data.frame")


   TransactionDate
1       2014-02-04
2       2012-04-24
3       2014-07-18
4       2012-03-23
5       2015-01-02
6       2014-05-29
7       2015-10-20
8       2011-05-12
9       2011-05-12
10      2013-05-01

这就是我的尝试。

newDF <- as.data.frame(df[which((as.numeric(format(Sys.Date(), '%Y')) - (as.numeric(format(df$TransactionDate, '%Y')))) <= 3),])

这给了我:

  df[which((as.numeric(format(Sys.Date(), "%Y")) - (as.numeric(format(df$TransactionDate, "%Y")))) <= 3), ]
1                                                                                                2014-02-04
2                                                                                                2014-07-18
3                                                                                                2015-01-02
4                                                                                                2014-05-29
5                                                                                                2015-10-20

我期望的输出是从上面的输出中排除第一个条目2014-02-04,因为它距今天已超过三年,即使它来自2014。有人可以帮我这个吗?

2 个答案:

答案 0 :(得分:1)

library(dplyr)
library(lubridate)
newdf <- df %>%
  filter(TransactionDate >= Sys.Date() - years(3))

答案 1 :(得分:0)

只用基础R:

R> recent <- subset(df, as.Date(TransactionDate) >= Sys.Date() - 1095)
R> head(recent)
  TransactionDate
3      2014-07-18
5      2015-01-02
6      2014-05-29
7      2015-10-20