【问题标题】:Sequencing var in each date [duplicate]每个日期的排序变量[重复]
【发布时间】:2016-07-24 21:45:11
【问题描述】:

我在数据框中有以下变量:

App.Date         App.No.
01/01/2012       A0001
01/01/2012       A0082
01/01/2012       F0003
02/01/2012       A0004
02/01/2012       A0055
03/01/2012       P0006
03/01/2012       A0007
03/01/2012       A0008
03/01/2012       A0009
.........        ......

我想创建一个变量来跟踪每个日期的排序 输出将是另一个变量,它将在每次更改日期时排序并开始

App.Date         App.No.  Seq
01/01/2012       A0001    1
01/01/2012       A0082    2
01/01/2012       F0003    3
02/01/2012       A0004    1
02/01/2012       A0055    2
03/01/2012       P0006    1
03/01/2012       A0007    2
03/01/2012       A0008    3
03/01/2012       A0009    4
.........        ......   .

如何在没有 for 循环的情况下在 R 中做到这一点?有超过 100k 行,必须在每次更改日期时创建一个系列。

【问题讨论】:

    标签: r date stat


    【解决方案1】:

    您可以使用dplyrmutate 函数来创建一个新列,该列将是一个从1 到每组日期中的行数的向量:

    library(dplyr)
    df <- df %>% group_by(App.Date) %>% mutate(seq = 1:n())
    df    
    
    # Source: local data frame [9 x 3]
    # Groups: App.Date [3]
    
    #     App.Date App.No.   seq
    #       <fctr>  <fctr> <int>
    # 1 01/01/2012   A0001     1
    # 2 01/01/2012   A0082     2
    # 3 01/01/2012   F0003     3
    # 4 02/01/2012   A0004     1
    # 5 02/01/2012   A0055     2
    # 6 03/01/2012   P0006     1
    # 7 03/01/2012   A0007     2
    # 8 03/01/2012   A0008     3
    # 9 03/01/2012   A0009     4
    

    或使用ave 对由App.Date 分组的序列执行cumsum

    df$Seq <- ave(rep(1, nrow(df)), df$App.Date, FUN = cumsum)
    df$Seq
    # [1] 1 2 3 1 2 1 2 3 4
    

    当你熟悉data.table 包时:

    library(data.table)
    setDT(df)
    df[, Seq := 1:.N, .(App.Date)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-29
      • 2012-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多