簡體   English   中英

如何計算R中不同日期的唯一ID?

[英]How to count unique IDs at different dates in R?

我是 R 的初學者,所以如果問題看起來很愚蠢或者有明顯的解決方案,或者已經在其他地方解決了,我提前道歉......

我有一個包含購買日期和客戶 ID 的 df :


  ANNEE    Date clientID
1  2017 2017-01      aaa
2  2017 2017-01      bbb
3  2018 2018-01      aaa
4  2018 2018-02      aaa
5  2018 2018-01      bbb
6  2019 2019-01      aaa
7  2019 2019-01      ccc
8  2020 2020-01      ddd
9  2020 2020-01      ccc

我想知道每年我的客戶中有多少百分比在前一年出現在我的 df 中。 在這個例子中,它看起來像:

dfObjective
Date   Prop
2017     0
2018     1
2019   0.5
2020   0.5

我認為第一步是重新安排我的 df 以計算給定年份中存在的客戶數量,無論他們購買了多少,並且我已經做到了(盡管我確信有更好的方法來做到這一點) )

library(plyr)
clients = ddply(df, "ANNEE", summarise, Count = length(unique(ClientID)))

df2
ANNEE Count
2017     2
2018     2
2019     2
2020     2

但是我找不到如何計算上一年已經至少購買一次的客戶比例......

先感謝您 !

這是一個tidyverse解決方案。

首先,按clientId分組以確定哪些客戶在上一年。 然后,按年份分組以找到比例。

library(tidyverse)

df <- read_table2("
 ANNEE    Date clientID
 2017 2017-01      aaa
 2017 2017-01      bbb
 2018 2018-01      aaa
 2018 2018-02      aaa
 2018 2018-01      bbb
 2019 2019-01      aaa
 2019 2019-01      ccc
 2020 2020-01      ddd
 2020 2020-01      ccc
")

df %>%
  distinct(clientID, ANNEE) %>%
  group_by(clientID) %>%
  mutate(in_previous_year = (ANNEE - 1) %in% ANNEE) %>%
  group_by(ANNEE) %>%
  summarise(Prop = sum(in_previous_year) / n())
#> # A tibble: 4 x 2
#>   ANNEE  Prop
#>   <dbl> <dbl>
#> 1  2017   0  
#> 2  2018   1  
#> 3  2019   0.5
#> 4  2020   0.5

基礎 R :

data.frame(ANNEE = unique(df$ANNEE), prop =
             rowMeans(apply(do.call(
               rbind, lapply(with(df[order(df$ANNEE), ],
                                  split(clientID, ANNEE)),
                             unique)
             ), 2, duplicated)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM