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