Как создать фиктивную переменную обработки на основе значений из двух разных переменных - PullRequest
0 голосов
/ 02 июля 2019

Я хотел бы сгенерировать фиктивную переменную лечения "treatment" на основе страновой переменной "iso" и фиктивной переменной "quake" при землетрясениях (для набора данных "data").

Я бы хотел получить фиктивную переменную "treatment", где, если quake == 1 хотя бы один раз за весь мой таймфрейм (скажем, 2000-2018), я бы хотел, чтобы все значения для этого "iso" имели "обработка" == 1, для всех других стран "iso" == 0. Таким образом, все страны, пострадавшие от землетрясений, имеют все наблюдения 1, другие 0.

Я пытался использовать dplyr, но так как я все еще очень зеленый в R, мне потребовалось несколько попыток, и я пока не нашел решения. Я посмотрел на этом сайте и Google.

Я подозреваю, что решение должно быть чем-то вроде, но я не могу закончить это сам:

data %>%
filter(quake==1) %>%
group_by(iso) %>%
mutate(treatment)

1 Ответ

2 голосов
/ 02 июля 2019

Добро пожаловать в StackOverflow!Вы должны действительно рассмотреть ссылки Сотоса для ваших следующих вопросов по SO :) Вот решение dplyr (после того, что вы начали):

## data
set.seed(123)
data <- data.frame(year = rep(2000:2002, each = 26), 
                   iso = rep(LETTERS, times = 3),
                   quake = sample(0:1, 26*3, replace = T))
## solution (dplyr option)
library(dplyr)
data2 <- data %>% arrange(iso) %>%
        group_by(iso) %>%
        mutate(treatment = if_else(sum(quake) == 0, 0, 1))
data2 
# A tibble: 78 x 4
# Groups:   iso [26]
    year iso   quake treatment
   <int> <fct> <int>     <dbl>
 1  2000 A         0         1
 2  2001 A         1         1
 3  2002 A         1         1
 4  2000 B         1         1
 5  2001 B         1         1
 6  2002 B         0         1
 7  2000 C         0         1
 8  2001 C         0         1
 9  2002 C         1         1
10  2000 D         1         1
# ... with 68 more rows
...