【发布时间】:2021-03-07 00:48:56
【问题描述】:
我正在对不平衡的面板数据集进行事件研究。基本结构是,在大约 15 年的时间里,我对每家公司在不同时间点有不同数量的观察(交付)。我对一个事件(价格上涨)感兴趣,如果它发生,它被编码为一个虚拟变量,并且一些虚拟的领先和滞后来检查价格上涨对我的因变量的影响是否在该事件周围变得明显。例如,对于某些公司来说,价格上涨发生在 5 次交货时,例如15 岁以上 50 人。
但是,现在我还想在一年前后“模拟”相同的事件研究以改进推理。因此,我希望 R 在最接近前后一年的交付时为每个公司复制事件虚拟对象。交货日期不是每天,而是平均每 25 天。
所以,作为代码,数据看起来像这样:
df <- data.frame(firm_id = c(1,1,1,1,1,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4),
delivery_id = c(1,2,6,9,15,3,5,18,4,7,8,10,11,13,17,19,22,12,14,16,20,21),
date=c("2004-06-16", "2004-08-12", "2004-11-22", "2005-07-03", "2007-01-04",
"2004-09-07", "2005-02-01", "2006-01-17",
"2004-10-11", "2005-02-01", "2005-04-27", "2005-06-01", "2005-07-01",
"2006-01-03", "2007-01-06", "2007-03-24", "2007-05-03",
"2005-08-03", "2006-02-19", "2006-06-13", "2007-02-04", "2007-04-26"),
price_increase = c(0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0),
price_increase_year_before = c(1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0),
price_increase_year_afer = c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0))
创作
firm_id delivery_id date price_increase price_increase_year_before price_increase_year_after
1 1 1 2004-06-16 0 1 0
2 1 2 2004-08-12 0 0 0
3 1 6 2004-11-22 0 0 0
4 1 9 2005-07-03 1 0 0
5 1 15 2007-01-04 0 0 0
6 2 3 2004-09-07 0 0 0
7 2 5 2005-02-01 0 0 0
8 2 18 2006-01-17 0 0 0
9 3 4 2004-10-11 0 0 0
10 3 7 2005-02-01 0 1 0
11 3 8 2005-04-27 0 0 0
12 3 10 2005-06-01 0 0 0
13 3 11 2005-07-01 0 0 0
14 3 13 2006-01-03 1 0 0
15 3 17 2007-01-06 0 0 1
16 3 19 2007-03-24 0 0 0
17 3 22 2007-05-03 0 0 0
18 3 12 2005-08-03 0 0 0
19 4 14 2006-02-19 0 0 0
20 4 16 2006-06-13 0 0 0
21 4 20 2007-02-04 0 0 0
22 4 21 2007-04-26 0 0 0
我想根据 price_increase 和日期为每个公司创建右侧的两个虚拟列。虽然我会从 dyplr 的 group_by 和 mutate 方法和 if_else 函数开始,但我不知道如何创建一个变为 TRUE 的条件,当一年的交货时间接近 +1/-1 个月时上一年或下一年的日期以及如何选择相应的交货。你们有什么想法吗?
【问题讨论】:
-
为什么
price_increase_year_after中只有一个1?此外,您共享的数据似乎不完整。你能纠正一下吗? -
您好 Ronak,感谢您的评论。原因是
firm_id = 1涨价一年后,下一次发货(delivery_id = 15)是两年后,超出了一年+1/-1个月的范围。
标签: r date dummy-variable panel-data