R:创建移动差异变量

时间:2016-04-01 14:19:06

标签: r

我正在尝试创建一个新行,它是面板数据中两个值之间的移动差异。

我的数据如下:

party_id year country position vote
    101 1984      be     2.75   2.3
    101 1988      be     2.75   0.8
    101 1992      be     3.33   0.1
    101 1996      be     3.67   0.1
    102 1984      be     5.80   12.6
    102 1988      be     5.80   15.7 

我想要一行显示两年内投票份额的差异:例如: 1988年和1984年。因此它显示了投票份额的变化。

所以我的数据看起来像是:

party_id year country position vote vote_difference
    101 1984      be     2.75   2.3    NA
    101 1988      be     2.75   0.8   -1.5
    101 1992      be     3.33   0.1   -0.7
    101 1996      be     3.67   0.1    0.0
    102 1984      be     5.80   12.6   NA
    102 1988      be     5.80   15.7   3.1

有什么想法吗?

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

使用data.table

library(data.table); setDT(data)

data[ , vote_difference := diff(vote), by = party_id]

答案 1 :(得分:1)

以下是一个基础R解决方案,它将指定的函数应用于vote分组的party_id

transform(DF, diff = ave(vote, party_id, FUN = function(x) c(NA, diff(x))))

,并提供:

  party_id year country position vote diff
1      101 1984      be     2.75  2.3   NA
2      101 1988      be     2.75  0.8 -1.5
3      101 1992      be     3.33  0.1 -0.7
4      101 1996      be     3.67  0.1  0.0
5      102 1984      be     5.80 12.6   NA
6      102 1988      be     5.80 15.7  3.1

注意:可重复形式的输入DF为:

Lines <- "party_id year country position vote
    101 1984      be     2.75   2.3
    101 1988      be     2.75   0.8
    101 1992      be     3.33   0.1
    101 1996      be     3.67   0.1
    102 1984      be     5.80   12.6
    102 1988      be     5.80   15.7 "
DF <- read.table(text = Lines, header = TRUE)