2015-02-12 2 views
0

С data.frame, содержащим идентификатор пользователя и метку времени, есть быстрый способ извлечь идентификаторы пользователей, которые достигают определенного количества с помощью шкалы времени скольжения.R Считывание числа ошибок в скользящем окне

Например, если я хочу найти всех пользователей, которые появляются 10 раз в течение 30 секунд.

Мои мысли состоят в первом подмножестве только для пользователей, которые достигают целевого счета (10) во всем файле данных. Затем вычтите первый временной штамп от последнего для каждого пользователя - если он меньше временной шкалы (30 секунд), добавьте в целевой список.

Если нет, то сначала проверить со вторым, первым с третьим и продолжать движение до достижения предельного времени (30 секунд) или целевого счета (10 раз). По достижении предельного времени мне нужно будет проверить второй с текущим элементом.

Возможно, есть библиотека, которая поможет выявить эти или некоторые формы стандартного отклонения, возможно, даже кластеризации, чтобы помочь выявить и извлечь меньший поднабор?

ответ

1

Предполагая одну точку в секунду, мы генерируем входной вектор 100 id s. Тогда мы rollapply через него выводят идентификаторы, которые occcur более чем в 10 раз:

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 и т.д.

В следующий раз, пожалуйста, предоставить тестовые данные и показать ожидаемый ответ.

 Смежные вопросы

  • Нет связанных вопросов^_^