【问题标题】:Subset panel data according to temporal order根据时间顺序子集面板数据
【发布时间】:2018-10-10 09:44:06
【问题描述】:

我想选择案例来估计援助对冲突的影响。在我的案例选择中,我只想有在冲突之前援助按时间顺序排列的案例。 这是一个示例数据集:

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))

任何帮助表示赞赏:)

【问题讨论】:

    标签: r time-series subset


    【解决方案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) 替换为获取实际年份的内容(例如 mutate 中的 conflict_year = year[conflict_year])。

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

    【讨论】:

    • 谢谢你的回答:)。我同意,跨国回归是在浪费时间。我用人工网格单元做 CEM!
    • 没有问题,如果可行,请随时接受。什么是 CEM?
    【解决方案2】:

    我们可以使用any 和filter

    dt %>% 
      group_by(name) %>% 
      filter(any(Aid == conflict))
    # A tibble: 6 x 4
    # Groups:   name [2]
    #   name   year   Aid conflict
    #   <fct> <int> <dbl>    <dbl>
    #1 A      2001     1        0
    #2 A      2002     0        0
    #3 A      2003     0        1
    #4 C      2001     1        0
    #5 C      2002     0        1
    #6 C      2003     1        1
    

    【讨论】:

      猜你喜欢
      • 2016-09-10
      • 1970-01-01
      • 2022-11-02
      • 2018-01-23
      • 2016-09-06
      • 1970-01-01
      • 2019-07-20
      • 2021-05-20
      • 1970-01-01
      相关资源
      最近更新 更多