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

How to generate a dummy treatment variable based on values from two different variables

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

我基本上想要一个虚拟变量 "treatment",如果在我的整个时间范围内至少有一次 quake==1(比如说 2000-2018),我想要它的所有值"iso" 有 "treatment"==1,对于所有其他国家/地区 "iso"==0。所以受地震影响的国家所有观测值1,其他国家0.

我尝试过使用 dplyr,但由于我对 R 还很陌生,所以我尝试了多次,但我还没有找到解决方案。我看过这个网站 google.

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

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

欢迎来到 Whosebug!你真的应该考虑 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