2016-03-12 2 views
0

У меня есть набор данных, который состоит из трех столбцов: пользователь, действие и время, которое является журналом действий пользователя. данные выглядят так:Создание сеансов пользователя на основе времени в R

 user action  time 
    1: 618663  34 1407160424 
    2: 617608  33 1407160425 
    3: 89514  34 1407160425 
    4: 71160  33 1407160425 
    5: 443464  32 1407160426 
    ---       
996: 146038  8 1407161349 
997: 528997  9 1407161350 
998: 804302  8 1407161351 
999: 308922  8 1407161351 
1000: 803763  8 1407161352 

Я хочу разделить сеансы для каждого пользователя в зависимости от времени действия. Действия, выполняемые в определенный период (например, один час), будут приниматься за один сеанс. Простым решением является использование цикла for и сравнение времени действия для каждого пользователя, но это неэффективно, и мои данные очень большие. Есть ли какой-нибудь метод, который можно использовать для преодоления этой проблемы? я могу пользователь группы, но отдельные о действиях пользователей в разные сеансы как-то сложно для меня :-)

ответ

3

Попробуйте

library(data.table) 
dt <- rbind(
    data.table(user=1, action=1:10, time=c(1,5,10,11,15,20,22:25)), 
    data.table(user=2, action=1:5, time=c(1,3,10,11,12)) 
) 
# dt[, session:=cumsum(c(T, !(diff(time)<=2))), by=user][] 
#  user action time session 
# 1: 1  1 1  1 
# 2: 1  2 5  2 
# 3: 1  3 10  3 
# 4: 1  4 11  3 
# 5: 1  5 15  4 
# 6: 1  6 20  5 
# 7: 1  7 22  5 
# 8: 1  8 23  5 
# 9: 1  9 24  5 
# 10: 1  10 25  5 
# 11: 2  1 1  1 
# 12: 2  2 3  1 
# 13: 2  3 10  2 
# 14: 2  4 11  2 
# 15: 2  5 12  2 

Я использовал разницу в <=2 для сбора сессий.

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