0

個々の 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 は削除しないでください。

4

2 に答える 2

2

フィルタリングする条件は、1 より大きいギャップがないことです。diff(time)でギャップが得られるのでall(diff(time) == 1)、条件をチェックします。

したがって、次の方法でこれを行うことができます。

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

data.table では、1 つの解決策 (同じことを行います) は次のとおりです。

setDT(data3)[, .SD[all(diff(time) == 1)], id]
于 2015-08-13T02:52:08.987 に答える
0

使用dplyr:

library(dplyr)
data3 %>% group_by(id) %>%
          filter(identical(time, seq(first(time), last(time))))
于 2015-08-13T02:51:54.130 に答える