如何基于两个不同变量的值生成虚拟治疗变量

时间:2019-07-02 08:46:43

标签: r filtering data-manipulation dummy-variable

我想基于国家变量“ iso”和地震虚拟变量“ quake”(对于数据集“ data”)生成虚拟处理变量“处理”。

我基本上想得到一个虚拟变量“处理”,如果在整个时间范围内(如果是2000-2018年)至少有一次地震== 1,我希望该“ iso”的所有值都具有对于所有其他国家,“治疗” == 1,“ iso” == 0。因此,受地震影响的国家/地区所有观测值均为1,其他观测值为0。

我曾经尝试过使用dplyr,但是由于我在R上仍然很绿,因此我花了很多时间尝试,但还没有找到解决方案。我看过这个网站和Google。

我怀疑解决方案应该类似于,但我自己无法完成:

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

1 个答案:

答案 0 :(得分:2)

欢迎使用StackOverflow!您应该真正考虑Sotos的链接,以解决关于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