data.table根据值和日期范围选择行

时间:2016-08-24 15:27:09

标签: r data.table dplyr lubridate

我有一个带有id,位置和日期的data.table。

library(data.table)
library(dplyr)
library(lubridate)

data<-data.table(
  id<-c(rep("1001",8),rep("1002",9),rep("1003",7)),
location<-c(rep("A",4),rep("B",4),rep("A",5),rep("B",4),rep("A",3),rep("B",4)),
 date<-c(seq(dmy('01-01-2014'),dmy('01-08-2014'), by = '1 month'),
    seq(dmy('01-04-2014'),dmy('01-12-2014'), by = '1 month'),
    seq(dmy('01-02-2015'),dmy('01-08-2015'),by = '1 month')))

names(data)<-c("id","location","date")

我想group_by(id,location)并选择在更改位置前最近几个月,以及根据月份值更改位置后最近几个月。可能会缺少几个月。

我目前的解决方案是为每个组排序和使用头/尾,并将 rbind 重新组合在一起。

data<-data[order(id,date)]

data[location=="A",tail(.SD,3),by=id]
data[location=="B",head(.SD,3),by=id]

如果有多个日期具有相同的值,则会失败,在这种情况下,我想将所有日期带回来。任何人都可以使用 rleid()或其他方式建议更好的编程方式吗?

0 个答案:

没有答案