我正在尝试创建一个新行,它是面板数据中两个值之间的移动差异。
我的数据如下:
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
有什么想法吗?
感谢您的帮助
答案 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)