从时间相关的面板数据创建数字序列

时间:2014-02-08 10:27:38

标签: r data-management panel-data

所以我有一个数据集,我有几年的学生在课堂上,他们在一年中的四分之一,所以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

我想生成一个序列,它创建一个新的变量累积季度的数量,如果我不得不合并年份和季度,但我怎么告诉它做一个像

这样的序列
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

我已尝试过rep命令和序列等但我不知道如何告诉它在每个参与者之后重新开始编号。学生的宿舍数量不同,我不需要知道他们开始的季度,这是大学数据所以他们可以在第二季度开始我想(我没有看过所有的起始值的整个数据集6K参与者左右)但我只需要它累积。我希望这个问题合适,我把问题格式化了。

1 个答案:

答案 0 :(得分: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