【问题标题】:How to generate a dummy treatment variable based on values from two different variables如何根据来自两个不同变量的值生成虚拟处理变量
【发布时间】:2019-07-02 08:46:43
【问题描述】:

我想根据国家变量“iso”和地震虚拟变量“quake”(用于数据集“data”)生成一个虚拟处理变量“treatment”。

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

我尝试过使用 dplyr,但由于我在 R 方面仍然很年轻,所以我尝试了多次,但我还没有找到解决方案。我看过这个网站和谷歌。

我怀疑解决方案应该是这样的,但我自己无法完成:

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

【问题讨论】:

  • 您可以使用data %>% group_by(iso) %>% mutate(treatment = as.integer(any(quake == 1))),如果您在quake 中只有1/0 值,data %>% group_by(iso) %>% mutate(treatment = as.integer(any(quake))) 也应该可以工作。

标签: r filtering data-manipulation dummy-variable


【解决方案1】:

欢迎来到 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

【讨论】:

  • 非常感谢 ANG、Ronak Shahs 和 Sotos 的快速回复!所有不同的反应似乎都运作良好。下次我会留意如何提出更好的问题,谢谢!
猜你喜欢
  • 2017-05-05
  • 2019-09-27
  • 2022-07-31
  • 1970-01-01
  • 2021-08-09
  • 2012-08-10
相关资源
最近更新 更多