Re: [問題] 快速產生column, 和前幾個row相依
可以試試看tapply做 會比迴圈再快一點
我自己模擬了一筆13000左右的資料只比迴圈快1.86倍
我有試過把比過的跳掉,可是發現變更慢
還在想有沒有什麼方法更快
code:
data$Session = unlist(tapply(data$Time, data$ID, function(v){
output = rep(0, length(v))
i = 1
session_num = 1
repeat
{
loc = as.numeric(v - v[i], unit='hours') < 1 & output == 0
output[loc] = session_num
session_num = session_num + 1
i = i + sum(loc)
if(i > length(v))
break
}
output
}))
模擬資料:
set.seed(100)
n = 2100
data = data.frame(ID = rep(1:n, ceiling(runif(n) * 10) + 1))
nrow(data)
# 13812
data$Time = Reduce(c, tapply(rep(1, nrow(data)), data$ID, function(v){
start_time = strptime("2014-08-01 00:00:00", "%Y-%m-%d %H:%M:%S")
as.POSIXlt(sort(start_time + round(86400 * runif(length(v)))))
}))
迴圈:5.301304 secs
tapply: 2.846163 secs
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.164.193.78
※ 文章網址: http://www.ptt.cc/bbs/R_Language/M.1409354422.A.A2C.html
推
08/30 07:24, , 1F
08/30 07:24, 1F
不客氣,只是你的迴圈版本跑出來的結果是錯的,你可能要檢查一下你有沒有貼錯。
→
08/30 07:29, , 2F
08/30 07:29, 2F
恩
※ 編輯: celestialgod (218.164.193.78), 08/30/2014 07:42:53
→
08/30 08:05, , 3F
08/30 08:05, 3F
推
08/30 08:09, , 4F
08/30 08:09, 4F
→
08/30 08:10, , 5F
08/30 08:10, 5F
推
08/30 23:18, , 6F
08/30 23:18, 6F
推
08/30 23:37, , 7F
08/30 23:37, 7F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
R_Language 近期熱門文章
PTT數位生活區 即時熱門文章