首页 > 解决方案 > 根据时间顺序子集面板数据

问题描述

我想选择案例来估计援助对冲突的影响。在我的案例选择中,我只想了解 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))

任何帮助表示赞赏:)

标签: rtime-seriessubset

解决方案


像这样。

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)替换。

此外,恕我直言,跨国回归是在浪费时间……但我想这不是答案的一部分,而且毫无疑问你知道你在做什么……


推荐阅读