r - 根据时间顺序子集面板数据
问题描述
我想选择案例来估计援助对冲突的影响。在我的案例选择中,我只想了解 Aid 在冲突之前按时间顺序排列的案例。这是一个示例数据集:
dt <- data.frame(name= rep(c("A", "B", "C"), c(3,3,3)),
year=c(2001:2003), Aid=c(1, 0, 0, 0, 0, 1, 1, 0, 1),
conflict=c(0, 0, 1, 1, 1, 0, 0, 1, 1))
因为在B国援助是在冲突之后,我想排除这种情况。最后,数据集应如下所示:
dt1 <- data.frame(name= rep(c("A", "C"), c(3,3)),
year=c(2001:2003), Aid=c(1, 0, 0, 1, 0, 1),
conflict=c(0, 0, 1, 0, 1, 1))
任何帮助表示赞赏:)
解决方案
像这样。
library(dplyr)
dt <- dt %>%
group_by(name) %>%
mutate(
aid_year = match(1, Aid),
conflict_year = match(1, conflict)
) %>%
filter(aid_year <= conflict_year)
## # A tibble: 6 x 6
## # Groups: name [2]
## name year Aid conflict aid_year conflict_year
## <fct> <int> <dbl> <dbl> <int> <int>
## 1 A 2001 1. 0. 1 3
## 2 A 2002 0. 0. 1 3
## 3 A 2003 0. 1. 1 3
## 4 C 2001 1. 0. 1 2
## 5 C 2002 0. 1. 1 2
## 6 C 2003 1. 1. 1 2
这假设所有国家的所有年份都相同。如果不是,那么你应该用match(1, Aid)
得到实际年份的东西(比如conflict_year = year[conflict_year]
在 中的东西mutate
)替换。
此外,恕我直言,跨国回归是在浪费时间……但我想这不是答案的一部分,而且毫无疑问你知道你在做什么……
推荐阅读
- appium - 尝试使用 appium + wdio 滚动
- java - 如何为运行 Java 应用程序的多 docker 容器 AWS Elastic Beanstalk 环境动态分配内存
- postgresql - 如何定义块的起始范围
- reactjs - 有什么方法可以在 React 中使用多个版本的 Bootstrap 而不会有任何麻烦?
- elasticsearch - 未正确加载 Kubernetes 上带有 filebeat 的 nginx 模块的模板字段映射
- swift - 您如何将委托协议模式与 SpriteKit 一起使用?
- html - 这个隐式 div 关闭是否与 HTML 规范相矛盾?
- c# - 如何将列表中的数字相乘?
- sql - BiqQuery 中的滚动每次点击费用
- shell - `sed` 替换并附加到同一行