【问题标题】:R: How to create dummy variable for multiple values?R:如何为多个值创建虚拟变量?
【发布时间】:2019-05-24 19:27:40
【问题描述】:

我有一个包含多个国家/地区的数据集,我想为各大洲创建一个虚拟变量。

我的数据集现在是这样的:

+---------------+-----------+-----+-----+-----+
|    Country    |  Period   |  X  |  Y  |  Z  |
+---------------+-----------+-----+-----+-----+
| Argentina     | 1991-1995 | ... | ... | ... |
| Argentina     | 1996-2000 | ... | ... | ... |
| Bolivia       | 1991-1995 | ... | ... | ... |
| Bolivia       | 1996-2000 | ... | ... | ... |
| Brazil        | 1991-1995 | ... | ... | ... |
| Brazil        | 1996-2000 | ... | ... | ... |
| Canada        | 1991-1995 | ... | ... | ... |
| Canada        | 1996-2000 | ... | ... | ... |
| United States | 1991-1995 | ... | ... | ... |
| United States | 1996-2000 | ... | ... | ... |
+---------------+-----------+-----+-----+-----+

我想要的输出如下:

+---------------+-----------+-----+-----+-----+---------+---------+
|    Country    |  Period   |  X  |  Y  |  Z  | dummySA | dummyNA |
+---------------+-----------+-----+-----+-----+---------+---------+
| Argentina     | 1991-1995 | ... | ... | ... |       1 |       0 |
| Argentina     | 1996-2000 | ... | ... | ... |       1 |       0 |
| Bolivia       | 1991-1995 | ... | ... | ... |       1 |       0 |
| Bolivia       | 1996-2000 | ... | ... | ... |       1 |       0 |
| Brazil        | 1991-1995 | ... | ... | ... |       1 |       0 |
| Brazil        | 1996-2000 | ... | ... | ... |       1 |       0 |
| Canada        | 1991-1995 | ... | ... | ... |       0 |       1 |
| Canada        | 1996-2000 | ... | ... | ... |       0 |       1 |
| United States | 1991-1995 | ... | ... | ... |       0 |       1 |
| United States | 1996-2000 | ... | ... | ... |       0 |       1 |
+---------------+-----------+-----+-----+-----+---------+---------+

所以,我想为南美洲的所有国家和北美的所有国家建立一个虚拟模型。我知道如何为单个国家或年份创建虚拟变量,但不会为多个值创建虚拟变量。

【问题讨论】:

    标签: r


    【解决方案1】:

    如果只有少数几个国家,请使用%in% 创建虚拟列

    library(dplyr)
    df1 %>%
        mutate(dummySA = as.integer(Country %in% 
            c("Argentina", "Bolivia", "Brazil")), 
            dummyNA = as.integer(!dummySA))
    

    否则,使用“国家/地区”和地理区域创建一个键/值数据集,进行合并/连接并通过 spread 创建虚拟值

    library(tidyr)
    df1 %>% 
       left_join(keyvaldat) %>%
       mutate(n = 1) %>%
       spread(value, n, fill = 0)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      相关资源
      最近更新 更多