【问题标题】:How to count unique IDs at different dates in R?如何计算 R 中不同日期的唯一 ID?
【发布时间】:2021-02-27 15:30:36
【问题描述】:

我是 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

但是我找不到如何计算上一年已经至少购买过一次的客户的比例......

提前谢谢你!

【问题讨论】:

    标签: r date count


    【解决方案1】:

    这是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
    

    【讨论】:

      【解决方案2】:

      基础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)))
      

      【讨论】:

        猜你喜欢
        • 2022-07-01
        • 2021-04-10
        • 1970-01-01
        • 1970-01-01
        • 2020-01-23
        • 2021-05-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多