我想选择案例来估计援助对冲突的影响。在我的案例选择中,我只想知道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))
任何帮助赞赏:)
答案 0 :(得分:0)
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
)。
此外,恕我直言的越野回归是浪费大量时间......但我想这不是答案的一部分,无疑你知道你在做什么......
答案 1 :(得分:0)
我们可以将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