Ich habe dieses Beispiel:Regular Zeit zwischen den Reihen mit R
structure(list(timestamp_pretty = structure(c(1L, 3L, 4L, 5L,
6L, 7L, 8L, 9L, 10L, 12L, 13L, 14L, 17L, 18L, 20L, 2L, 11L, 15L,
16L, 19L), .Label = c("01/06/2014 00:04:00", "01/06/2014 00:04:01",
"01/06/2014 00:07:10", "01/06/2014 00:10:10", "01/06/2014 00:13:11",
"01/06/2014 00:19:20", "01/06/2014 00:20:02", "01/06/2014 00:22:20",
"01/06/2014 00:25:30", "01/06/2014 01:11:11", "01/06/2014 01:16:03",
"01/06/2014 01:17:12", "01/06/2014 01:20:41", "01/06/2014 01:26:51",
"01/06/2014 01:28:03", "01/06/2014 01:43:03", "01/06/2014 01:45:20",
"01/06/2014 02:12:01", "01/06/2014 02:13:05", "01/06/2014 02:18:01"
), class = "factor"), mmsi = c(205477000L, 205477000L, 205477000L,
205477000L, 205477000L, 205477000L, 205477000L, 205477000L, 205477000L,
205477000L, 205477000L, 205477000L, 205477000L, 205477000L, 205477000L,
205482000L, 205482000L, 205482000L, 205482000L, 205482000L)), .Names = c("timestamp_pretty",
"mmsi"), row.names = c(8L, 9L, 17L, 16L, 4L, 12L, 3L, 14L, 10L,
7L, 13L, 19L, 6L, 15L, 1L, 11L, 18L, 20L, 2L, 5L), class = "data.frame")
die Säule diff_time_seconds_timestamp_pretty
ist die Zeitdifferenz zwischen den Reihen von mmsi
.
Ich möchte einige Signale (Zeilen) entfernen und nur die Signale alle XXX Sekunden (zum Beispiel 180 Sekunden) für jede mmsi
halten.
Mein Gedanke war, das Paket zoo
zu verwenden, scheint es dafür getan zu werden. Aber ich konnte es nicht schaffen, so jetzt ich bin auf der Suche nach:
- Fügen Sie die cum Summe der
diff_time_seconds_timestamp_pretty
pro MMSI - , um die Signale zu entfernen, die weniger als 180 Sekunden von einander.
- Um die Signale zu halten, die mindestens 180 Sekunden von eachother
Ich versuche mit
library(dplyr)
test <- data %>%
group_by(mmsi) %>%
mutate(cum.sum=cumsum(diff_time_seconds_timestamp_pretty))
zu arbeiten, aber es scheint, dass ich bin noch weit davon entfernt, was ich will.
Hilfe ist willkommen!
können Sie Ihre erwartete Ausgabe hinzufügen? Etwas wie 'df%>% group_by (mmsi)%>% muate (diff_time = timestamp_pretty - lag (timestamp_pretty))%>% filter (diff_time> = 180)' würde funktionieren? – Sotos
Das könnte funktionieren. Ich werde weiterhin mit dieser Basis arbeiten, danke. Die Ausgabe ist ein bisschen schwierig zu produzieren. Ich weiß nur, dass die meisten Signale alle 10 Sekunden sind, und ich möchte nur Signale alle 3 oder 4 Minuten haben. – Floni
Die Sache mit dieser Lösung ist, dass es auch die allererste Beobachtung eliminiert, die behoben werden kann, aber cum sum ist hier am verwirrendsten. Beachten Sie auch, dass ich 'timestamp_pretty' in' POSIXct' konvertiert habe, dh 'df $ timestamp_pretty <- as.POSIXct (df $ timestamp_pretty, Format = '% d /% m /% Y% H:% M:% S')' – Sotos