根据 R 中 data.table 中的日期选择半最后观察
choose semi-last observations based on date in data.table in R
我有一个 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"]
问题是倒数第二个日期并不总是相同的日期。我将多次重复这个过程,我想避免手动指定它。有什么想法吗?
将数据转换为日期对象并sort
转换为select半最后日期。
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
我有一个 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"]
问题是倒数第二个日期并不总是相同的日期。我将多次重复这个过程,我想避免手动指定它。有什么想法吗?
将数据转换为日期对象并sort
转换为select半最后日期。
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