根据R中data.table中的日期选择最后观察

时间:2020-05-20 03:05:30

标签: r date data.table lag

我有一个带日期的data.table(作为因子变量)。我从这些得到滞后值。我怎样才能告诉R仅对半倒数日期的观测值运行滞后值?在这种情况下,应该是start == "01.01.2015"

示例数据:

ID <- rep("A5", 15)
product <- rep(c("prod1","prod2","prod3", "prod55", "prod4", "prod9", "prod83"),3)
start <- c(rep("01.01.2016", 3), rep("01.01.2015", 3), rep("01.01.2014",3),
           rep("01.01.2013",3), rep("01.01.2012",3))
prodID <- c(3,1,2,3,1,2,3,1,2,3,2,1,3,1,2)
mydata <- cbind(ID, product[1:15], start, prodID)
mydata <- as.data.table(mydata)

mydata[, (nameCols) := shift(.SD, 3, fill = "NA", "lead"), .SDcols= c("start", "V2"), by = "prodID"]

目前,我已使用它来获得结果:

mydata[start == "01.01.2015"]

问题在于,最后日期不一定总是相同的日期。我将重复此过程很多次,并且我希望避免手动指定此过程。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

将数据转换为日期对象,然后将sort转换为最后日期。

library(data.table)

mydata[, start := as.IDate(start, '%d.%m.%Y')]
mydata[start == sort(unique(start), decreasing = TRUE)[2]]


#   ID     V2      start prodID
#1: A5 prod55 2015-01-01      3
#2: A5  prod4 2015-01-01      1
#3: A5  prod9 2015-01-01      2