我试图将虚拟变量添加到带有时间,id和许多其他变量的面板数据集中。
library(zoo)
geo = c("AT","AT","AT","BE","BE","BE","DE","DE","DE")
time = c("1990Q1","1990Q2","1990Q3","1990Q1","1990Q2","1990Q3","1990Q1","1990Q2","1990Q3")
Data <- as.data.frame(cbind(geo, time))
Data$time = as.yearqtr(Data$time)
实际上有20个国家和97个季度。我不会四处解决'geo'元素,但是(time> 2004Q1)会很好
我希望从1990年第二季度开始为奥地利和德国提供假人。所以我想得出:
geo time dummmy
1 AT 1990 Q1 0
2 AT 1990 Q2 1
3 AT 1990 Q3 1
4 BE 1990 Q1 0
5 BE 1990 Q2 0
6 BE 1990 Q3 0
7 DE 1990 Q1 0
8 DE 1990 Q2 1
9 DE 1990 Q3 1
我无法靠近任何地方,我正在考虑一种状态逻辑(如果是,则为生成变量,这是其他东西),但是我在R中最接近的是创建单独的国家/地区假人,然后将每个人与时间变量和子集绑定在一起在提取所有单个虚拟变量并将它们添加到我的原始数据之前,将它们放在时间变量上。那不可能是最好的解决方案(并且不能完全起作用),因为它大约需要40行代码……这应该很容易做到,不是吗?
任何帮助将是巨大的!
ps:我的尝试遵循以下思路:
AT <- as.numeric(Data$geo == "AT")
DE <- as.numeric(Data$geo == "DE")
AT <- as.data.frame(cbind(Data$time, AT))
DE <- as.data.frame(cbind(Data$time, DE))
但我认为我走错了方向,我无法正确设定时间维度...
看来您必须使用zoo
该as.yearqtr
函数的库。在这种情况下,“时间”列可与标准比较运算符进行比较。因此,基本上,您似乎只希望time>“ 1990Q1”和“ geo”为“ AT”或“ DE”的所有值。你可以做到这一点
Data$dummy<-(Data$time>as.yearqtr("1990Q1") & Data$geo %in% c("AT","DE"))+0
这里做+0
将逻辑真/假设置为0/1
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句