按R中可用总数据的最后12个月筛选数据
R: 我有一个数据集,其中N个产品的销售值从某个yyyy-mm-dd到某个yyyy-mm-dd,我只想筛选数据集中每个产品过去12个月的数据 例如: 比如说,我有2016-01-01到2020-02-01的值 所以现在我想过滤过去12个月的销售额,即2019-02-01到2020-02-01 我不能简单地提到“过滤器(月份>=as.Date(“2019-04-01”)&Month,您可以使用:按R中可用总数据的最后12个月筛选数据,r,date,R,Date,R: 我有一个数据集,其中N个产品的销售值从某个yyyy-mm-dd到某个yyyy-mm-dd,我只想筛选数据集中每个产品过去12个月的数据 例如: 比如说,我有2016-01-01到2020-02-01的值 所以现在我想过滤过去12个月的销售额,即2019-02-01到2020-02-01 我不能简单地提到“过滤器(月份>=as.Date(“2019-04-01”)&Month,您可以使用: library(dplyr) library(lubridate) data %>% gro
library(dplyr)
library(lubridate)
data %>%
group_by(Product) %>%
filter(between(date, max(date) - years(1), max(date)))
#filter(date >= (max(date) - years(1)) & date <= max(date))
库(dplyr)
图书馆(lubridate)
数据%>%
组别(产品)%>%
过滤器(介于(日期、最长(日期)-年(1)、最长(日期))之间)
#筛选(日期>=(最大(日期)-年(1))&date您可以测试日期是否大于等于每个产品的最大日期减去365天:
library(dplyr)
df %>%
group_by(Products) %>%
filter(Date >= max(Date)-365)
# A tibble: 6 x 2
# Groups: Products [3]
Products Date
<dbl> <date>
1 1 2002-01-21
2 1 2002-02-10
3 2 2002-02-24
4 2 2002-02-10
5 2 2001-07-01
6 3 2005-03-10
库(dplyr)
df%>%
集团(产品)%>%
过滤器(日期>=最大值(日期)-365)
#一个tibble:6x2
#组别:产品[3]
产品日期
1 1 2002-01-21
2 1 2002-02-10
3 2 2002-02-24
4 2 2002-02-10
5 2 2001-07-01
6 3 2005-03-10
资料
df如果您的目标只是捕获从今天到去年同一天的条目,那么:
函数Sys.Date()
将当前日期作为Date
类型的对象返回。然后,您可以将其转换为POSIXlc表单,以调整年份以获取开始日期。例如:
end.date <- Sys.Date()
end.date.lt <- asPOSIXlt(end.date)
start.date.lt <- end.date.lt
start.date.lt$year <- start.date.lt$year - 1
start.date <- asPOSIXct(start.date.lt)
end.date输入:
代码:
这就是你要找的吗?谢谢Ronak。对于那些想这样做几个月的人,你可能会遇到NA问题。1月31日+1个月=2月28日还是3月3日?看看这个,使用lubridate的%m-%
来帮助。例如过滤器(介于(日期,最大(日期)$m-$months(1),最大(日期))
end.date <- Sys.Date()
end.date.lt <- asPOSIXlt(end.date)
start.date.lt <- end.date.lt
start.date.lt$year <- start.date.lt$year - 1
start.date <- asPOSIXct(start.date.lt)
product date
1: a 2017-01-01
2: b 2017-04-01
3: a 2017-07-01
4: b 2017-10-01
5: a 2018-01-01
6: b 2018-04-01
7: a 2018-07-01
8: b 2018-10-01
9: a 2019-01-01
10: b 2019-04-01
11: a 2019-07-01
12: b 2019-10-01
library(lubridate)
library(data.table)
DT <- data.table(
product = rep(c("a", "b"), 6),
date = seq(as.Date("2017-01-01"), as.Date("2019-12-31"), by = "quarter")
)
yearBefore <- function(x){
year(x) <- year(x) - 1
x
}
date_DT <- DT[, .(last_date = last(date)), by = product]
date_DT[, year_before := yearBefore(last_date)]
result <- DT[, date_DT[DT, on = .(product, year_before <= date), nomatch=0]]
result[, last_date := NULL]
setnames(result, "year_before", "date")
product date
1: a 2018-07-01
2: b 2018-10-01
3: a 2019-01-01
4: b 2019-04-01
5: a 2019-07-01
6: b 2019-10-01