2014-10-31 7 views
1

У меня есть некоторые данные панели. Для этих данных я хочу рассчитать разницу на каждый год для каждой группы, если у группы были наблюдения в оба года.Вычисление разницы в вычислениях

Вот данные:

> head(statistics) 
    persnr year NOBS  value 
1: 61961225 1993 1 0.5777598 
2: 62037645 1993 1 0.5777598 
3: 62181514 1993 1 0.5777598 
4: 62499451 1993 1 0.5777598 
5: 62649247 1993 1 0.5777598 
6: 62744472 1993 1 0.5777598 

Где persnr является GroupID для панели. И мой нынешний подход был что-то вдоль линий

dataTable = data.table(cast(statistics, persnr ~ year, value='totalWage')) 
# y is the second year. Iterate over that 
for (y in tail(unique(statistics[, jahr]), n=-1)): 
    # get the first year 
    x <- y - 1 
    dataTable[!is.na(`x`) & !is.na(`y`), `y`-`x`] 
} 

Однако, я не могу использовать схему \ x`` для доступа столбцов. Каким был бы «R-ish» способ решения этого?

ответ

2

Я думаю, что вы хотите использовать data.table здесь:

statistics[ by=persnr, order(year), list(year=year[-1], diff = diff(value)) ] 

Это даст вам data.table остроумие колонки: persnr, year и diff. Вы можете изменить -1 на -N, чтобы сдвинуть, какие отличия пропущены, первый или последний.

+0

Вы не используете 'order' в' data.table'. Либо используйте 'setkey' или' setorder' –

+0

@DavidArenburg, вы можете, когда вы не хотите изменять порядок исходной таблицы данных. – Arun

Смежные вопросы