這並沒有明確地回答你的問題,但是展示瞭如何使用cut
創建你想要的數據來創建「訪問」,然後計算唯一的訪問次數。
library(data.table)
set.seed(1234)
dat <- data.table(visit_time = sample(20, 100, replace = TRUE),
id = sample(LETTERS[1:5], 100, replace = TRUE))
dat[ , visit := cut(visit_time, breaks = seq(0, 20, 5))]
dat[ , list(nvisits = length(unique(visit))), by = id]
# id nvisits
# 1: A 4
# 2: C 4
# 3: B 4
# 4: D 4
# 5: E 4
運行下面的節目,他們同樣時間跨度/就診中有多少時間是在該位置:
dat[ , .N, by = list(id, visit)]
# id visit N
# 1: A (0,5] 6
# 2: C (10,15] 5
# 3: B (10,15] 6
# 4: A (15,20] 3
# 5: A (10,15] 5
# 6: D (10,15] 6
# 7: E (5,10] 7
# 8: B (5,10] 6
# 9: E (15,20] 4
# 10: D (0,5] 6
# 11: D (5,10] 4
# 12: E (0,5] 9
# 13: C (0,5] 4
# 14: B (15,20] 1
# 15: C (15,20] 9
# 16: B (0,5] 6
# 17: A (5,10] 2
# 18: C (5,10] 5
# 19: D (15,20] 2
# 20: E (10,15] 4
編輯顯示切換功能將如何隨時間的工作:
我從this excellent answer取randTime
功能。
randTime <- function(N, st, et) {
st <- as.POSIXct(st)
et <- as.POSIXct(et)
dt <- as.numeric(difftime(et,st,unit="sec"))
ev <- sort(runif(N, 0, dt))
rt <- st + ev
rt
}
set.seed(1234)
st <- as.POSIXct("2012/01/01 12:00")
et <- as.POSIXct("2012/01/01 18:00")
dat2 <- data.table(visit_time = randTime(100, st, et),
id = sample(LETTERS[1:5], 100, replace = TRUE))
dat2[ , visit := as.character(cut(visit_time, breaks = seq(st, et, "15 min")))]
dat2[ , length(unique(visit)), by = id]
# id V1
# 1: A 11
# 2: C 13
# 3: B 14
# 4: D 14
# 5: E 14
你只要做,然後追加到它。這就是動態語言如何做到的。這對於那些需要複製的大列表正在擴大的問題更重要。更多的小向量和值R已經在你背後佔據了主導地位。 –
這聽起來有點像你只是想融化和過濾......沒有一個特定的數據例子,但它很難知道。 –
我建議你第2章「成長對象」,它正是你要求的:) http://www.burns-stat.com/pages/Tutor/R_inferno。pdf他提出的解決方案是由@Roland提出的解決方案,但他也分析了系統時間用於完成某些任務的其他方法(在塊中與在rbind與下標之間增長)。 You cn – Eugen