создать последовательность чисел из зависимых от времени панельных данных

Итак, у меня есть набор данных, в котором у меня есть годы, когда учащиеся были в классах, и в каком квартале они были, поэтому 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 и последовательность и тому подобное, но я не знаю, как сказать ему перезапустить нумерацию после каждого участника. количество четвертей зависит от студента, и мне не нужно знать, в какой четверти они начинают, это данные университета, поэтому они могут начать во 2 четверти, я полагаю (я не просматривал весь набор данных о начальных значениях для всех 6 тысяч участников или около того), но мне просто нужно, чтобы это накопилось. Я надеюсь, что этот вопрос уместен, и я правильно отформатировал свой вопрос.


person JPK    schedule 08.02.2014    source источник


Ответы (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
person agstudy    schedule 08.02.2014