【问题标题】:Delete data with gaps删除有间隙的数据
【发布时间】:2015-08-13 02:42:24
【问题描述】:

我想删除与单个 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 组,但不能删除第 6 组。

【问题讨论】:

  • 为了将来参考,没有理由删除问题或其标题,因为它已被回答(这将阻止它对未来的搜索者有用)。

标签: r time gaps-in-data


【解决方案1】:

您要过滤的条件是没有大于 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]

【讨论】:

    【解决方案2】:

    使用dplyr:

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

    【讨论】:

      猜你喜欢
      • 2020-03-14
      • 2016-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-07
      • 2018-05-23
      • 2014-07-06
      • 2013-03-05
      相关资源
      最近更新 更多