每个日期排序变量

时间:2016-07-24 21:45:11

标签: r date stat

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

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中执行此操作?有超过10万行,必须在每次更改日期时创建一个系列。

1 个答案:

答案 0 :(得分:1)

您可以dplyr使用mutate功能创建一个新列,该列将是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对按cumsum分组的序列进行App.Date

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)]