我有一个数据集,其中一列是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
。有人可以帮我这个吗?
答案 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