Генерируйте SessionId из UserId и разницу в метках времени без сортировки UserID - PullRequest
1 голос
/ 14 июня 2019

Я пытаюсь сгенерировать SessionId из UserId и разницу в timestamps. Первому пользователю в таблице, очевидно, назначен 1, и оттуда sessionId должен быть увеличен на 1, если один и тот же пользователь входит в систему, и разница между текущим входом в систему и предыдущим входом составляет менее 5 минут, в противном случае он должен быть увеличен на 1. Я могу сделать это, используя цикл for и операторы nested if, но мне интересно, можно ли это сделать с помощью dplyr или аналогичных пакетов. Уже есть похожий вопрос здесь , но он сортирует UserId, и я хочу достичь этого без сортировки UserId.

Input and Output(SessionId) is in the same table.
 CustomerID           TimeStamp SessionID
        101 0000-01-01 01:00:00         1
        101 0000-01-01 01:03:00         1
        102 0000-01-01 01:05:00         2
        103 0000-01-01 01:06:00         3
        104 0000-01-01 01:06:00         4
        101 0000-01-01 01:09:00         5
        105 0000-01-01 01:10:00         6
        104 0000-01-01 01:10:00         4
        106 0000-01-01 01:11:00         7
        105 0000-01-01 01:12:00         6
        104 0000-01-01 01:12:00         4
        104 0000-01-01 01:18:00         8
        104 0000-01-01 01:20:00         8
        105 0000-01-01 01:21:00         9
        104 0000-01-01 01:26:00        10

1 Ответ

1 голос
/ 14 июня 2019

В вашем случае вы можете сделать group_by и преобразовать различное время в группе на cumsum (это одна из дополнительных клавиш, помогающих определить окончательный номер группы), затем мы используем factor и * 1004.*

df = df %>% group_by(CustomerID) %>% 
      mutate(x=paste(CustomerID, cumsum(c(F, diff(TimeStamp))>5)))
df$x = as.numeric(factor(df$x, as.character(unique(df$x))))
df
# A tibble: 15 x 4
# Groups:   CustomerID [6]
   CustomerID           TimeStamp SessionID     x
        <int>              <dttm>     <int> <dbl>
 1        101 0000-01-01 01:00:00         1     1
 2        101 0000-01-01 01:03:00         1     1
 3        102 0000-01-01 01:05:00         2     2
 4        103 0000-01-01 01:06:00         3     3
 5        104 0000-01-01 01:06:00         4     4
 6        101 0000-01-01 01:09:00         5     5
 7        105 0000-01-01 01:10:00         6     6
 8        104 0000-01-01 01:10:00         4     4
 9        106 0000-01-01 01:11:00         7     7
10        105 0000-01-01 01:12:00         6     6
11        104 0000-01-01 01:12:00         4     4
12        104 0000-01-01 01:18:00         8     8
13        104 0000-01-01 01:20:00         8     8
14        105 0000-01-01 01:21:00         9     9
15        104 0000-01-01 01:26:00        10    10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...