R: Как создать фиктивную переменную для нескольких значений? - PullRequest
1 голос
/ 24 мая 2019

У меня есть набор данных с несколькими странами, и я хочу создать фиктивную переменную для континентов.

На данный момент мой набор данных выглядит следующим образом:

+---------------+-----------+-----+-----+-----+
|    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 |
+---------------+-----------+-----+-----+-----+---------+---------+

Итак, я хочу иметь пустышку для всехстраны Южной Америки и пустышка для всех стран Северной Америки.Я знаю, как создать пустышку для одной страны или года, но не для нескольких значений.

1 Ответ

2 голосов
/ 24 мая 2019

Если есть только несколько стран, создайте фиктивный столбец с %in%

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

В противном случае создайте набор данных ключ / val с 'Country' и географической областью, выполните слияние / объединение и создайте фиктивные значения с помощью spread

library(tidyr)
df1 %>% 
   left_join(keyvaldat) %>%
   mutate(n = 1) %>%
   spread(value, n, fill = 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...