Если вы создаете новый набор данных с уникальными пользователями для каждого месяца, вы можете использовать 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
")