Получение уникальных пропорций клиентов по месяцам в R - PullRequest
0 голосов
/ 05 октября 2018

Я работаю с большой электронной базой данных, которая записывает события, управляемые пользователем.По сути, я хочу получать процент / процент новых пользователей к сервису ежемесячно в течение всего года.Ниже приведен лишь пример макета данных: -

    UserId    Month   UserEventId

    Tyrhjj01   Jan     0998907
    Fghhey21   Jan     0989892
    Hyhkio52   Jan     7782901
    hejdoe78   Jan     3889201
    Tyrhjj01   Feb     7829930
    sjjwilsn   Feb     7728910
    Tyrhjj01   Feb     9203749
    nnkilo89   Feb     7728912
    Fghhey21   Feb     4463782

... И так далее.Как вы можете видеть, есть клиенты, которые регулярно пользуются сервисом, хотя некоторые клиенты являются уникальными в феврале. Я хочу получить процент клиентов, которые являются старыми, и клиентов, которые являются уникальными для системы. Я прилагаюиллюстрация, чтобы помочь для лучшего понимания.

Процент новых и старых клиентов:

img.

Я пробовал пару примеров из dplyr и data.table, но безрезультатно.Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 05 октября 2018

Если вы создаете новый набор данных с уникальными пользователями для каждого месяца, вы можете использовать rowid из data.table, чтобы увидеть, присутствуют ли они в df в предыдущие месяцы.

library(data.table)
setDT(df)

users <- df[, .(user = unique(UserId)), Month] 
users[, visit := rowid(user)] # create variable for number of months user has visited
users[, .(new_pct = mean(visit == 1)), Month] 

#    Month new_pct
# 1:   Jan     1.0
# 2:   Feb     0.5

Или с tidyverse

Редактировать: приведенное ниже решение не работает, если ваш столбец Month на самом деле содержит названия месяцев символов.Как показано ниже, dplyr группировка переупорядочивает ваши данные (в отличие от data.table), и поэтому дает неверные результаты с этим методом.Я оставлю код ниже, поскольку он работает, если Month является столбцом класса даты.

df %>% 
  group_by(Month) %>% 
  do(user = unique(.$UserId)) %>% 
  unnest %>% 
  group_by(user) %>% 
  mutate(visit = row_number()) %>% 
  group_by(Month) %>% 
  summarise(new_pct = mean(visit == 1))

# # A tibble: 2 x 2
#   Month new_pct
#   <chr>   <dbl>
# 1 Feb     1.00 
# 2 Jan     0.500

Используемые данные:

df <- fread("
UserId    Month   UserEventId
Tyrhjj01   Jan     0998907
Fghhey21   Jan     0989892
Hyhkio52   Jan     7782901
hejdoe78   Jan     3889201
Tyrhjj01   Feb     7829930
sjjwilsn   Feb     7728910
Tyrhjj01   Feb     9203749
nnkilo89   Feb     7728912
Fghhey21   Feb     4463782
")
...