Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 根据时间顺序对面板数据进行子集_R_Time Series_Subset - Fatal编程技术网

R 根据时间顺序对面板数据进行子集

R 根据时间顺序对面板数据进行子集,r,time-series,subset,R,Time Series,Subset,我想选择一些案例来评估援助对冲突的影响。在我的案例选择中,我只想让援助在冲突前按时间顺序排列。 以下是一个示例数据集: 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)) dt像

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

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))
dt像这样

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
库(dplyr)
dt%
分组单位(名称)%>%
变异(
援助年=匹配(1,援助),
冲突年=匹配(1,冲突)
)                                   %>% 

过滤器(辅助年我们可以使用
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
dt%>%
分组单位(名称)%>%
过滤器(任意(辅助==冲突))
#一个tibble:6x4
#分组:名称[2]
#命名年份援助冲突
#         
#1A 2001 10
#2 A 2002 0
#3 A 2003 0 1
#4 C 2001 1 0
#5 C 2002 0 1
#6 C 2003 1

谢谢您的回答:)。我同意,跨国回归是对时间的极大浪费。我用人工网格单元做CEM!没问题,如果有效,请随意接受。什么是CEM?
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