2014-10-31 105 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机智的列:persnryeardiff。您可以将-1更改为-N以将其中的差异省略,即第一个或最后一个。

+0

你不在'data.table'中使用'order'。无论是使用'setkey'还是'setorder' – 2014-11-02 08:59:36

+0

@DavidArenburg,你都可以,当你不想改变原始data.table的顺序。 – Arun 2014-11-02 13:01:03