0
我有如下表:如何根據時間差的長格式轉換爲寬幅
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"
))
我想要做的是檢索的開始和結束時間。如果我們查看錶我們得到:
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
所以第1行,是時候當我開始吃牛肉和第3行是當我停止吃牛肉。因此,如果連續有相同的活動,那麼帶有S的那個應該與第一個E相匹配.S表示一個開始活動,而E表示一個結束活動。
我應該如何在data.table中解決這個問題?
最終的結果應該是這樣的:
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
(這個順序是任意的,但只是用來描述最終結果,即開始時間與結束時間相結合。)
你知道'sqldf'包嗎?......它似乎是這類任務的好選擇! – Hackerman
Arg,我希望有downvote按鈕的意見... –