Ich habe die folgende Tabelle:Wie langes Format Wide-Format konvertieren, basierend auf Zeitdifferenzen
library(data.table)
data <- data.table(Timestamp = c(as.POSIXct("2016-01-15 02:00:00"),
as.POSIXct("2016-01-15 04:00:00"),
as.POSIXct("2016-01-16 02:00:00"),
as.POSIXct("2016-01-15 05:00:00"),
as.POSIXct("2016-01-17 08:00:00"),
as.POSIXct("2016-01-17 08:00:00"),
as.POSIXct("2016-01-17 09:00:00"),
as.POSIXct("2016-01-22 09:00:00")),
Activty = c("Eating Beef",
"Eating Cake",
"Eating Beef",
"Eating Cake",
"Sleeping",
"Eating Beef",
"Eating Beef",
"Sleeping"),
Tag = c("S",
"S",
"E",
"E",
"S",
"S",
"E",
"E"
))
Was ich will, um die Start- und Endzeiten tun abruft. Wenn wir die Tabelle sehen wir bekommen:
Timestamp Activty Tag
1: 2016-01-15 02:00:00 Eating Beef S
2: 2016-01-15 04:00:00 Eating Cake S
3: 2016-01-16 02:00:00 Eating Beef E
4: 2016-01-15 05:00:00 Eating Cake E
5: 2016-01-17 08:00:00 Sleeping S
6: 2016-01-17 08:00:00 Eating Beef S
7: 2016-01-17 09:00:00 Eating Beef E
8: 2016-01-22 09:00:00 Sleeping E
So 1 Zeile, ist die Zeit, wenn ich anfangen zu essen Rindfleisch und Zeile 3 ist, wenn ich Rindfleisch aufhören zu essen. Bei einer Reihe mit der gleichen Aktivität sollte die mit einem S mit der ersten E übereinstimmen. Das S zeigt eine Startaktivität an, während die E eine Endaktivität ist.
Wie soll ich dieses Problem in data.table angehen?
StartTime EndTime Activty
1: 2016-01-15 02:00:00 2016-01-16 02:00:00 Eating Beef
2: 2016-01-15 04:00:00 2016-01-15 05:00:00 Eating Cake
5: 2016-01-17 08:00:00 2016-01-22 09:00:00 Sleeping
6: 2016-01-17 08:00:00 2016-01-17 09:00:00 Eating Beef
(Diese Reihenfolge ist beliebig, sondern nur um das Endergebnis zeigen verwendet, dh die Startzeiten mit den Endzeiten zu kombinieren.)
Kennen Sie das 'sqldf' Paket? .... es scheint ein guter Kandidat für diese Art von Aufgaben zu sein! – Hackerman
Arg, ich wünschte es gäbe einen Downvote Button für Kommentare ... –