我有一个由 n 个人组成的调查;每个人在调查中出现一次以上(小组)。我有一个可变笔,如果个人投资于补充养老金形式,它是一个价值 1 的虚拟笔。例如:
df <- data.frame(year=c(2002,2002,2004,2004,2006,2008), id=c(1,2,1,2,3,3), y.b=c(1950,1943,1950,1943,1966,1966), sex=c("F", "M", "F", "M", "M", "M"), income=c(100000,55000,88000,66000,12000,24000), pens=c(0,1,1,0,1,1))
year id y.b sex income pens
2002 1 1950 F 100000 0
2002 2 1943 M 55000 1
2004 1 1950 F 88000 1
2004 2 1943 M 66000 0
2006 3 1966 M 12000 1
2008 3 1966 M 24000 1
其中 id 是个人,yb 是出生年份,pens 是关于补充养老金的虚拟变量。
我想知道是否有个人在 t 年投资了补充养老金,但在 t+2 年没有持有补充养老金(调查每两年进行一次)。通过这种方式,我想知道有多少人拥有补充养老金表格但在养老金之前释放或放弃(例如出于经济原因)。
我试过这个命令:
df$x <- (ave(df$pens, df$id, FUN = function(x)length(unique(x)))==1)*1
which(df$x=="0")
实际上,我有一些人的 pen 变量在一段时间内发生了变化(该命令检查变量是否及时保持不变)。出于这个原因,我发现个人的笔变量从 t 年的 0(没有补充养老金)变为 t+2 年的 1,反之亦然;但我对第 t 年笔变量为 1(有补充养老金)和 t+2 年为 0 的个人感兴趣。
如果我将此命令与 df 一起使用,我会得到 id 1 和 2 的变量 x 为 0(pen 变量不是常量),但我需要找到一种方法来获取 id 2(其 pen 变量从1比0)。
df$x <- (ave(df$pens, df$id, FUN = function(x)length(unique(x)))==1)*1
which(df$x=="0")
year id pens x
1 2002 1 0 0
2 2002 2 1 0
3 2004 1 1 0
4 2004 2 0 0
5 2006 3 1 1
6 2008 3 1 1
(为了简洁起见,我省略了其他变量)
所以想要的输出是:
year id pens x
1 2002 1 0 1
2 2002 2 1 0
3 2004 1 1 1
4 2004 2 0 0
5 2006 3 1 1
6 2008 3 1 1
只有 id 2 具有 x=0,因为 pen 变量从 1 变为 0。
提前致谢