[問題] 快速產生column, 和前幾個row相依
[問題類型]:
效能諮詢(我想讓R 跑更快)
[軟體熟悉度]:
入門(寫過其他程式,只是對語法不熟悉)
[問題敘述]:
有一組 data 已照 ID, Time 排序
需要產生一個 column (Session),
將相隔一固定時間 (1hr) 內的算在同一個 Session。
Ex:
ID Time Session
1 2014-08-28 00:00:00 1
1 2014-08-28 00:23:33 1
1 2014-08-28 00:59:59 1
1 2014-08-28 01:00:00 2
1 2014-08-28 02:30:00 3
1 2014-08-28 03:29:59 3
2 2014-08-28 00:00:01 1
每個列和前幾列相依且未知有幾列,
似乎只能用 for loop 做一次 linear scan,
資料量約 1~10 萬 rows/day, 要處理好幾個月的資料。
不曉得有什麼好方法?
目前 13000 rows 約花 3.5 sec, 用 compiler 套件加速到 3.3 sec
data.table 極慢, 要 30 sec
用 python 的 pandas 套件用同樣的方法寫 for loop
只要 600 ms。
希望 R 至少能做到和 python 速度類似。
[程式範例]:
張貼能夠重現錯誤的程式碼,可以幫助版友更快的幫你解決問題
目前產生新 column 大概是這樣
data$Session <- 0
id <- data[1, 'ID']
session.start <- data[1, 'Time']
data[1, 'Session'] <- 1
for (row in 2:nrow(data)) {
if (id != data[row, 'ID']) {
session.start <- data[row, 'Time']
data[row, 'Session'] <- 1
id <- data[row, 'ID']
} else {
if (as.numeric(data[row, 'Time'] -
data[row-1, 'Time'], unit='hours') >= 1) {
# Start a new session
data[row, 'Session'] <- data[row-1, 'Session']+1
session.start <- data[row, 'Time']
} else {
data[row, 'Session'] <- data[row-1, 'Session']
}
}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 66.228.162.44
※ 文章網址: http://www.ptt.cc/bbs/R_Language/M.1409346226.A.6EB.html
※ 編輯: forloricever (66.228.162.44), 08/30/2014 05:05:08
※ 編輯: forloricever (66.228.162.44), 08/30/2014 05:05:51
※ 編輯: forloricever (66.228.162.44), 08/30/2014 05:06:53
※ 編輯: forloricever (66.228.162.44), 08/30/2014 05:10:52
※ 編輯: forloricever (66.228.162.44), 08/30/2014 08:05:48
→
08/31 21:54, , 1F
08/31 21:54, 1F
→
08/31 21:55, , 2F
08/31 21:55, 2F
→
08/31 21:56, , 3F
08/31 21:56, 3F
→
08/31 21:57, , 4F
08/31 21:57, 4F
→
08/31 22:05, , 5F
08/31 22:05, 5F
→
08/31 22:05, , 6F
08/31 22:05, 6F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
R_Language 近期熱門文章
PTT數位生活區 即時熱門文章