2016-07-24 2 views
0

나는 dataframe에서 다음과 같은 변수가 있습니다시퀀싱 VAR

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 루프없이 어떻게 할 수 있습니까? 100,000 개가 넘는 행이 있으며 날짜가 변경 될 때마다 시리즈를 만들어야합니다.

당신은 일의 각 그룹 내에서 행의 수에 1에서 벡터를 될 것입니다 새 열을 만들 수 mutate 기능 dplyr을 사용할 수 있습니다

답변

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별로 그룹화 사람의 순서 : 당신이 data.table 패키지에 익숙해

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

:

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