对于包含用户ID和时间戳的data.frame,有一种快速方法可以在滑动时间范围内提取达到特定计数的用户ID。
例如,如果我想找到在30秒内出现10次的所有用户。
我的想法是首先仅对在整个data.set中达到目标计数(10)的用户进行子集化。然后为每个用户减去最后一个时间戳 - 如果小于时间刻度(30秒),则添加到目标列表。
如果没有那么先用秒测试,先用第三测试然后继续测试直到达到时间限制(30秒)或目标计数(10次)。达到时间限制后,我需要用当前元素测试第二个。
也许有一个库来帮助发现这些或某种形式的标准偏差,甚至是聚类 - 来帮助发现并提取一个较小的子集?
答案 0 :(得分:1)
假设每秒一个点,我们生成一个100 id' s s
的输入向量。然后我们rollapply
在它上面输出ID超过10次的ID:
library(zoo)
set.seed(123)
s <- sample(c("a", "b", "c"), 100, replace = TRUE) # test data
f <- function(x) toString(names(which(table(x) > 10)))
rollapply(s, 30, f)
[1] "c" "c" "c" "c" "c" "c" "c" "c" "c" "c"
[11] "c" "a, c" "a, c" "a, c" "a, c" "a, c" "a" "a" "a" "a"
[21] "a" "a" "a" "a" "a" "a" "a" "a" "a" "a"
[31] "a" "a" "a" "a" "a" "a" "a" "a" "a" "a"
[41] "a, b" "b" "b" "" "a" "" "" "b" "b" "b"
[51] "b" "b" "b" "b" "b" "b" "b" "b, c" "b, c" "b, c"
[61] "b, c" "c" "b, c" "b, c" "b, c" "b" "b" "b" "b" "b"
[71] "b"
上面的第一点对应于时间1-30,次要对应于时间2-31,等等。
下次请提供测试数据并显示预期答案。