删除有间隙的数据

时间:2015-08-13 02:42:24

标签: r time gaps-in-data

我想删除对应于个人ID的最大和最小时间段之间的间隙的数据。每个Id都可以在任何时间段内开始和结束,这很好。我只想抓住在最大和最小时间内没有错过时间的ID。

library(data.table)
set.seed(5)
data<-data.table(y=rnorm(100))
data[sample(1:100, 40),]<-NA
id = rep(1:10, each = 10)
time = seq(1,10)
data2<-data.frame(id,time)
data2$row<-1:nrow(data2)
data2a<-subset(data2,row<55|row>61 )
data3<-data2a[-sample(nrow(data2a), 5),]
data.table(data3)
count(data3$id)

这是一个很好的例子。应删除组1,但不应删除例如。

2 个答案:

答案 0 :(得分:2)

您想要过滤的条件是没有大于1的间隙。diff(time)会为您提供间隙,因此all(diff(time) == 1)会检查条件。

您可以这样做:

library(dplyr)
data3 %>%
    group_by(id) %>%
    filter(all(diff(time) == 1))

在data.table中,一个解决方案(做同样的事情)是:

setDT(data3)[, .SD[all(diff(time) == 1)], id]

答案 1 :(得分:0)

使用dplyr

library(dplyr)
data3 %>% group_by(id) %>%
          filter(identical(time, seq(first(time), last(time))))