例のデータが不足して返します。それが存在する場合はアンチ参加するだけで「前」行
library(dplyr)
x <- data.frame(name = c(rep('Alice', 4), rep('Bob', 3)),
timestamp = c(1, 5, 10, 11, 1, 3, 4), stringsAsFactors = F)
y <-
base::merge(I(c('Alice', 'Bob')), c(1:3, 5:15)) # note missing time stamp = 4
names(y) <- names(x)
y <-
y %>%
arrange(name,timestamp)
私は、データフレームanti_join(y,x)
に各連続ブロック(timestamp
を使用して注文した)で、見つけることが最後の行をしたいと思います。
anti_join
を構築し、サンプルデータを使用:
> head(x_missing, 11)
name timestamp
1 Alice 2
2 Alice 3
3 Alice 6
4 Alice 7
5 Alice 8
6 Alice 9
7 Alice 12
8 Alice 13
9 Alice 14
10 Alice 15
11 Bob 2
を与える
x_missing <-
dplyr::anti_join(y, x) %>%
arrange(name,timestamp)
私がするソリューションをしたいと思います:
name timestamp
Alice 3
Alice 9
Alice 15
...
ソリューションは、より高速にする必要がありますanti_join(y,x)
の計算よりも遅くなります。x,y
は大きいです。
アリスのための3つの連続したタイムスタンプブロックが(2,3)、(6,7,8,9)及び(12,13,14,15) – Alex
'のY%です>%anti_join(x)%>%group_by(name)%>%filter(%timestamp - 1)%>%arrange(name、timestamp) '? – alistaire
@alistaireあなたはそれを答えに入れるべきです –