2014-02-08 35 views
0

所以我有一個數據集,我有幾年的學生在課堂上,他們在一年的什麼季度,所以2002年是4次,它有季度1,2, 3,4,如下圖所示:從時間依賴面板數據創建數字序列

matrix(c(1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2002,2002,2002,2002,2003,2003,2003,2002,2002,2002,2002,2003,2003,2003,2003,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3),ncol=3,dimnames=list(c(NULL),c("ids","year","quarter"))) 

這給了我這個

 ids year quarter 
[1,] 1 2002  1 
[2,] 1 2002  2 
[3,] 1 2002  3 
[4,] 1 2002  4 
[5,] 1 2003  1 
[6,] 1 2003  2 
[7,] 1 2003  3 
[8,] 2 2002  4 
[9,] 2 2002  1 
[10,] 2 2002  2 
[11,] 2 2002  3 
[12,] 2 2003  4 
[13,] 2 2003  1 
[14,] 2 2003  2 
[15,] 2 2003  3 

我要生成它創建了一個新的變量cumuluating季度數的順序,它不會是很難合併一年和季度如果我必須,但我如何告訴它做一個序列如

structure(c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2002, 
2002, 2002, 2002, 2003, 2003, 2003, 2002, 2002, 2002, 2002, 2003, 
2003, 2003, 2003, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 
1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 8), .Dim = c(15L, 4L 
), .Dimnames = list(NULL, c("ids", "year", "quarter", "sequence quarters" 
))) 

給我這個

 ids year quarter sequence quarters 
[1,] 1 2002  1     1 
[2,] 1 2002  2     2 
[3,] 1 2002  3     3 
[4,] 1 2002  4     4 
[5,] 1 2003  1     5 
[6,] 1 2003  2     6 
[7,] 1 2003  3     7 
[8,] 2 2002  4     1 
[9,] 2 2002  1     2 
[10,] 2 2002  2     3 
[11,] 2 2002  3     4 
[12,] 2 2003  4     5 
[13,] 2 2003  1     6 
[14,] 2 2003  2     7 
[15,] 2 2003  3     8 

我曾試圖代表命令和順序等,但我不知道如何告訴它每個參與者後,重新啓動編號。學生的宿舍數量有所不同,我不需要知道他們開始在哪個季度,這是大學數據,所以他們可以在第2季度開始我想(我沒有看過整個數據集的所有開始值6K參與者左右),但我只是需要它累積。我希望這個問題是適當的,我格式化了我的問題。

回答

1

使用ave通過ids並調用seq

transform(dat , seqs = ave(dat[,'ids'],dat[,'ids'],FUN=seq)) 
ids year quarter seqs 
1 1 2002  1 1 
2 1 2002  2 2 
3 1 2002  3 3 
4 1 2002  4 4 
5 1 2003  1 5 
6 1 2003  2 6 
7 1 2003  3 7 
8 2 2002  4 1 
9 2 2002  1 2 
10 2 2002  2 3 
11 2 2002  3 4 
12 2 2003  4 5 
13 2 2003  1 6 
14 2 2003  2 7 
15 2 2003  3 8