Beispieldaten:Anti kommt aber nur zurückkehren „vorherige“ fehlende Zeile
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)
Ich mag, finden, wenn es vorhanden ist, die letzte Zeile in jedem zusammenhängenden Block (Reihenfolge mit timestamp
) im Datenrahmen anti_join(y,x)
.
Unter Verwendung der Beispieldaten, konstruieren die anti_join
:
x_missing <-
dplyr::anti_join(y, x) %>%
arrange(name,timestamp)
die
> 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
gibt, gebe ich die Lösung sein möchte:
name timestamp
Alice 3
Alice 9
Alice 15
...
Die Lösung schneller
sein muss als Berechnunganti_join(y,x)
, die beiübermäßig langsam istsind groß.
die drei zusammenhängenden Blöcke Zeitstempel für Alice sind (2,3), (6,7,8,9) und (12,13,14,15) – Alex
'y% >% anti_join (x)%>% group_by (Name)%>% filter (! Zeitstempel% in% (Zeitstempel - 1))%>% ordnen (Name, Zeitstempel) '? – alistaire
@alistaire sollten Sie das in eine Antwort setzen, nett –