我想基于国家变量“ iso”和地震虚拟变量“ quake”(对于数据集“ data”)生成虚拟处理变量“处理”。
我基本上想得到一个虚拟变量“处理”,如果在整个时间范围内(如果是2000-2018年)至少有一次地震== 1,我希望该“ iso”的所有值都具有对于所有其他国家,“治疗” == 1,“ iso” == 0。因此,受地震影响的国家/地区所有观测值均为1,其他观测值为0。
我曾经尝试过使用dplyr,但是由于我在R上仍然很绿,因此我花了很多时间尝试,但还没有找到解决方案。我看过这个网站和Google。
我怀疑解决方案应该类似于,但我自己无法完成:
data %>%
filter(quake==1) %>%
group_by(iso) %>%
mutate(treatment)
答案 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