Я хотел бы создать переменную, содержащую значение переменной в предыдущем году в группе.Создайте переменную с запаздыванием в данных несбалансированной панели в R
id date value
1 1 1992 4.1
2 1 NA 4.5
3 1 1991 3.3
4 1 1990 5.3
5 1 1994 3.0
6 2 1992 3.2
7 2 1991 5.2
value_lagged
должны отсутствовать, когда в прошлом году отсутствует в группе - либо потому, что это первая дата в пределах группы (как в строке 4, 7), или потому, что существуют пробелы в год в данных (как в строке 5). Кроме того, value_lagged
должно отсутствовать, когда отсутствует текущее время (как в строке 2).
Это дает:
id date value value_lagged
1 1 1992 4.1 3.3
2 1 NA 4.5 NA
3 1 1991 3.3 5.3
4 1 1990 5.3 NA
5 1 1994 3.0 NA
6 2 1992 3.2 5.2
7 2 1991 5.2 NA
В настоящем время, в R, я использую data.table
пакет
DT = data.table(id = c(1,1,1,1,1,2,2),
date = c(1992,NA,1991,1990,1994,1992,1991),
value = c(4.1,4.5,3.3,5.3,3.0,3.2,5.2)
)
setkey(DT, id, date)
DT[, value_lagged := DT[J(id, date-1), value], ]
DT[is.na(date), value_lagged := NA, ]
Это быстро, но это, кажется, несколько ошибки склонной ко мне. Я хотел бы знать, есть ли лучшие альтернативы, используя data.table
, dplyr
или любой другой пакет. Большое спасибо!
В Stata
, можно было бы сделать:
tsset id date
gen value_lagged=L.value
Если вы специально не хотите, чтобы строки с отсутствующим ** значением ** не имели соответствующего запаздывающего значения, вы, вероятно, хотели использовать 'is.na (date)' not 'is.na (значение)' –
yes, corrected , Благодарю. – Matthew
@Matthew кажется, что у вас уже есть достойное решение - что именно вы хотите улучшить? – eddi