2016-07-24 50 views
0

我有一個數據幀以下變量:測序變種

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 
.........  ...... . 

如何在R中不使用for循環?有超過10萬行,必須在每次更改日期時創建一個系列。

回答

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做一個cumsum通過App.Date分組1的序列:

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