r - 交错的数据创建额外的行(例如时间变量)
问题描述
我在要处理的数据中有这个问题
基本上在这个数据表A中:
FIRM yrqtr happened
A 2001Q1 0
A 2001Q2 0
A 2001Q3 1
A 2001Q4 0
A 2002Q1 1
A 2002Q2 0
A 2002Q3 0
基本上“yrqtr”是季度变量,发生是这家公司“发生”的事情,是一个因素变量。
我想创建一个时间索引变量,以便在发生前 1 个季度(发生 == 1)时间索引将收到时间索引 0,在收到时间索引 -1 之前的 2 个季度。由于它在“发生”之前,该行中的“发生”列将接收 0。
这同样适用于 (happened == 1) 收到时间索引 2 之后的未来 1 季度,并且在该行发生也将变为 1,在收到时间索引 3 之后的未来 2 季度,发生将再次变为 1。
我只想要发生之前和之后的 2 个时期,否则会有时间索引 NA 或者只是省略它。
如果这家公司只发生一次,这很容易做到,通过使用 seq() 函数在 (happened == 1) 之后开始创建额外的时间列,并在“已发生”上使用 ifelse 条件,如果时间为正,则“已发生”将为 1负时间为0。
但现在我有两个“发生”并且相互重叠,我想创建额外的行来适应重叠时间。
这就是我要的:
FIRM yrqtr happened time
A 2001Q1 0 -1
A 2001Q2 0 0
A 2001Q3 1 1
A 2001Q4 1 2
A 2002Q1 1 3
A 2001Q3 0 -1
A 2001Q4 0 0
A 2002Q1 1 1
A 2002Q2 1 2
A 2002Q3 1 3
因此,这就像发生两个事件的时间线错开,创建新行来容纳时间变量。
任何人都知道如何使用例如 data.table 来处理这个问题,还是我需要为它编写一个循环?
这与为交错差值估计创建数据有关。
非常感谢。
解决方案
假设该happened
列应与以前保持一致,这是一种使用zoo
and的可能方法data.table
:
library(zoo)
DT[, yrqtr := as.yearqtr(yrqtr)]
DT[happened==1L,
.(yrqtr=seq(yrqtr-0.5, by=0.25, length.out=5),
happened=c(0L,0L,1L,1L,1L),
time=-1L:3L),
by=.(FIRM, rowid(happened))][, rowid:=NULL]
输出:
FIRM yrqtr happened time
1: A 2001 Q1 0 -1
2: A 2001 Q2 0 0
3: A 2001 Q3 1 1
4: A 2001 Q4 1 2
5: A 2002 Q1 1 3
6: A 2001 Q3 0 -1
7: A 2001 Q4 0 0
8: A 2002 Q1 1 1
9: A 2002 Q2 1 2
10: A 2002 Q3 1 3
数据:
library(data.table)
DT <- fread("FIRM yrqtr happened
A 2001Q1 0
A 2001Q2 0
A 2001Q3 1
A 2001Q4 0
A 2002Q1 1
A 2002Q2 0
A 2002Q3 0")
推荐阅读
- javascript - 为元素内的 onclick 函数添加参数
- python - 更改包的全局变量
- azure - 将数据从 Azure Data Lake 移动到 Big Query
- javascript - 是否可以限制锚点HTML 5 下载属性中的文件扩展名?
- terraform - 詹金斯3-X | Terraform 销毁 | 错误 - 如果 EKS 未完全创建 |
- html - 居中社交媒体图标
- javascript - 在转换为我的本地时间之前发现网站的基本时区
- php - 无法安装 symfony/maker-bundle
- jquery - 在 Jquery 中,许多函数都有几十个选择器(从“#A1”到“#A300”)。我想通过索引简化为数组,每个,forEach,var
- python - 如何以编程方式发布到 Django Rest Framework 端点?