Создание новой переменной в условиях двух других переменных - PullRequest
0 голосов
/ 06 февраля 2020

Я пытаюсь создать новую переменную в наборе данных при некоторых условиях других переменных. По сути, я хочу упростить информацию об образовании родителей, которая разделена между отцом и матерью, и создать новую, которая учитывает самый высокий уровень образования родителей. Например, если уровень образования отца равен 1, а уровень образования матери равен 0, значение для этой строки в новой переменной будет равно 1.

Я пытаюсь использовать mutate() с case_when() функциями, это работало в другой переменной, но я не понимаю, почему не сейчас. Когда я пытаюсь, он создает столбец только с NA, и когда я печатаю из него таблицу, результат:

<таблица экстентов 0>

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

Сначала я попробовал следующую команду (я упрощаю коды):

dataset <- dataset %>% 
           mutate(NEW_EDUCATIONAL_VAR = case_when(MOTHER_EDUCATIONAL_VAR == '0' &  FATHER_EDUCATIONAL_VAR == '0' ~ '0',
                                                  MOTHER_EDUCATIONAL_VAR == '0' & FATHER_EDUCATIONAL_VAR == '1' ~ '1')

Затем я попытался рассмотреть случаи, в которых есть значения NA, поскольку в некоторых строках есть NA:

dataset <- dataset %>% 
           mutate(NEW_EDUCATIONAL_VAR = case_when(is.na(MOTHER_EDUCATIONAL_VAR) & is.na(FATHER_EDUCATIONAL_VAR) ~ '99',
                                                  MOTHER_EDUCATIONAL_VAR == '0' & FATHER_EDUCATIONAL_VAR == '1' ~ '1')

Когда я использовал эти функции для создания новой для возраста случаев, это сработало ,

dataset <- dataset %>% mutate(AGE_CAT = case_when(AGE >= 16 & AGE <= 18 ~ '0',
                                                   AGE >= 19 & AGE <= 24 ~ '1',
                                                   AGE >= 25 & AGE <= 29 ~ '2',
                                                   AGE >= 30 ~ '3'))

Итак, что я делаю не так? Большое спасибо.

1 Ответ

0 голосов
/ 06 февраля 2020

Вы можете поиграть со значениями. Надеюсь это поможет.

#packages
library(tidyverse)

#sample data
Mother <- c(0,0,0,1,1,NA)
Father <- c(0,1,1,0,0,1)
df <- data.frame(Mother, Father)
str(df) #both Mother and Father columns are numeric

#mutate + case_when
df %>% 
  mutate(New = case_when(Mother == 0 & Father == 0 ~ 0, #condition 1
                         Mother == 0 & Father == 1 ~ 1, #condition 2
                         is.na(Mother) & Father == 1 ~ NA_real_, #condition 3
                         TRUE ~ 99)) #all other cases

Выход:

  Mother Father New
1      0      0   0
2      0      1   1
3      0      1   1
4      1      0  99
5      1      0  99
6     NA      1  NA
...