在 R 中使用 Tidyverse 查找 "nth attempt"

Finding the "nth attempt" using Tidyverse in R

我有一个数据集,按日期显示每个访问面包店网页的用户的登录信息 unique_session_code。我正在尝试提供一个代码,让我可以确定这是第一次、第二次、第三次等等...该客户的访问,换句话说是“nth_visit”,我真的在寻找解决方案使用 tidyverse 包,但如果没有办法使用 tidyverse 做到这一点,那么所有其他解决方案都将受到赞赏。感谢您的帮助!

USER LOG_DATE TX_REV
ALEX 30/04/2021 uyjd
MARY 30/04/2021 dn89
DOLLY 30/04/2021 nqmd0
FRANK 29/04/2021 nsj456
MARY 29/04/2021 zlpa2
DOLLY 29/04/2021 s09dm
ALEX 28/04/2021 jds02
MARY 28/04/2021 kqos98
DOLLY 28/04/2021 uiskk0

这就是我想要的结果:

USER LOG_DATE TX_REV nth_visit
ALEX 28/04/2021 jds02 1
ALEX 30/04/2021 uyjd 2
DOLLY 28/04/2021 uiskk0 1
DOLLY 29/04/2021 s09dm 2
DOLLY 30/04/2021 nqmd0 3
FRANK 29/04/2021 nsj456 1
MARY 28/04/2021 kqos98 1
MARY 29/04/2021 zlpa2 2
MARY 30/04/2021 dn89 3

一个数据框,访问者每次尝试访问该网站时都具有“nth_visit”

我做了什么?

我尝试按时间顺序排列日期并按 ID 分组,并查看了一些我尝试使用函数 rank_dense 的文档,但它没有给我想要的结果。甚至没有关闭。

非常感谢你们

代码:

df<-tibble::tribble(
  ~USER,    ~LOG_DATE,  ~TX_REV,
  "ALEX",       "30/04/2021",   "uyjd",
  "MARY",       "30/04/2021",   "dn89",
  "DOLLY",  "30/04/2021",   "nqmd0",
  "FRANK",  "29/04/2021",   "nsj456",
  "MARY",       "29/04/2021",   "zlpa2",
  "DOLLY",  "29/04/2021",   "s09dm",
  "ALEX",       "28/04/2021",   "jds02",
  "MARY",       "28/04/2021",   "kqos98",
  "DOLLY",  "28/04/2021",   "uiskk0")

在 tidyverse 中执行此操作的一种方法是:

df %>% group_by(USER) %>% mutate(nth_visit = seq_along(USER)) %>% 
   ungroup() %>% arrange(USER, nth_visit)

# A tibble: 9 x 4
  USER  LOG_DATE   TX_REV nth_visit
  <chr> <chr>      <chr>      <int>
1 ALEX  30/04/2021 uyjd           1
2 ALEX  28/04/2021 jds02          2
3 DOLLY 30/04/2021 nqmd0          1
4 DOLLY 29/04/2021 s09dm          2
5 DOLLY 28/04/2021 uiskk0         3
6 FRANK 29/04/2021 nsj456         1
7 MARY  30/04/2021 dn89           1
8 MARY  29/04/2021 zlpa2          2
9 MARY  28/04/2021 kqos98         3

按日期排序会有所帮助,否则访问编号将按数据中出现的顺序而非时间顺序排列。

df %>%
  mutate(LOG_DATE_DT = as.Date(LOG_DATE, "%d/%m/%Y")) %>%
  arrange(USER, LOG_DATE_DT) %>%
  group_by(USER) %>%
  mutate(nth_visit = row_number()) %>%
  ungroup()

# A tibble: 9 x 5
  USER  LOG_DATE   TX_REV LOG_DATE_DT nth_visit
  <chr> <chr>      <chr>  <date>          <int>
1 ALEX  28/04/2021 jds02  2021-04-28          1
2 ALEX  30/04/2021 uyjd   2021-04-30          2
3 DOLLY 28/04/2021 uiskk0 2021-04-28          1
4 DOLLY 29/04/2021 s09dm  2021-04-29          2
5 DOLLY 30/04/2021 nqmd0  2021-04-30          3
6 FRANK 29/04/2021 nsj456 2021-04-29          1
7 MARY  28/04/2021 kqos98 2021-04-28          1
8 MARY  29/04/2021 zlpa2  2021-04-29          2
9 MARY  30/04/2021 dn89   2021-04-30          3