【问题标题】:Calculating Tenure Day in R在 R 中计算任期日
【发布时间】:2018-10-29 16:23:34
【问题描述】:

所以我前段时间问了一个类似的问题(请参阅Creating a tenure column in Days in R)但我无法获得正确的结果,但现在我已经找到了另一种可能的方式来要求同样的事情,这可能是更容易锻炼。

问题:我希望创建一个专栏来告诉我客户任期的日期。这是一些模拟代码:

    Date<-c("01/01/2018", "12/02/2018", "10/03/2018", "22/03/2018", "29/03/2018", "01/04/2018", "02/04/2018","04/04/2018","07/04/2018","11/04/2018", "15/04/2018", "17/04/2018","19/04/2018","21/04/2018","22/04/2018", "29/04/2018", "01/05/2018","03/05/2018","08/05/2018", "10/05/2018", "12/05/2018")
    ClientID<-c("aaa","bbb","ccc","ddd", "eee", "fff", "ggg","aaa","bbb","ccc","ddd", "eee", "fff", "ggg","aaa","bbb","ccc","ddd", "eee", "fff", "ggg")
    df<-cbind(ClientID, Date)
    df<-as.data.frame(df)
    df$Date<-dmy(df$Date)
    df$yearDay<-df$Date
    df$yearDay<-yday(df$yearDay)

给你这样的东西:

    df

   ClientID       Date      yearDay
   aaa          2018-01-01       1
   bbb          2018-02-12      43
   ccc          2018-03-10      69
   ddd          2018-03-22      81
   eee          2018-03-29      88
   fff          2018-04-01      91
   ggg          2018-04-02      92
   aaa          2018-04-04      94
   bbb          2018-04-07      97
   ccc          2018-04-11     101
   ddd          2018-04-15     105
   eee          2018-04-17     107
   fff          2018-04-19     109
   ggg          2018-04-21     111
   aaa          2018-04-22     112
   bbb          2018-04-29     119
   ccc          2018-05-01     121
   ddd          2018-05-03     123
   eee          2018-05-08     128
   fff          2018-05-10     130
   ggg          2018-05-12     132

现在我想做的(但不知道该怎么做)是在第二个实例中为每个客户 ID 获取 yearDay 数字,并在前一个实例中减去 yearDay。然后取第三个实例中的 yearDay 数字并减去前一个实例中的 yearDay。依此类推(我有超过四百万行数据)。答案应该留给我任期日。看起来像这样:-

    ClientID       Date      yearDay     tenureDay
    aaa          2018-01-01       1          1
    bbb          2018-02-12      43          1
    ccc          2018-03-10      69          1
    ddd          2018-03-22      81          1
    eee          2018-03-29      88          1 
    fff          2018-04-01      91          1
    ggg          2018-04-02      92          1
    aaa          2018-04-04      94          93 
    bbb          2018-04-07      97          54
    ccc          2018-04-11     101          48
    ddd          2018-04-15     105          24
    eee          2018-04-17     107          19
    fff          2018-04-19     109          18
    ggg          2018-04-21     111          19

知道我将如何实现这一目标吗?

提前谢谢你!!!

【问题讨论】:

    标签: r date days


    【解决方案1】:

    您可以为此使用dplyr 包中的mutate()arrange()lag()group_by() 的组合。

    library(dplyr)
    
    df %>%
      group_by(ClientID) %>%
      arrange(yearDay) %>%
      mutate(tenureDay = yearDay - lag(yearDay)) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-29
      • 2018-02-27
      • 2023-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-07
      • 2021-12-31
      相关资源
      最近更新 更多