Данные панели поднабора в соответствии с временным порядком - PullRequest
0 голосов
/ 30 апреля 2018

Я хочу выбрать случаи, чтобы оценить влияние помощи на конфликт. В моем случае, я просто хочу иметь случаи, когда помощь хронологична до конфликта. Вот пример набора данных:

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

Поскольку в стране В помощь оказывается после конфликта, я хочу исключить этот случай. В итоге набор данных должен выглядеть так:

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

Любая помощь приветствуется :)

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Мы можем использовать 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
0 голосов
/ 30 апреля 2018

Вот так.

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

Кроме того, ИМХО кросс-кантри-регрессия - большая пустая трата времени ... но я думаю, что это не часть ответа, и, несомненно, вы знаете, что делаете ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...