Создать новый столбец с помощью оператора ifelse на основе комбинации с другими столбцами в R

У меня есть набор данных с двумя столбцами - городским_руральским и религиозным. Я хочу создать новый столбец на основе двух конкретных взаимодействий между этими двумя столбцами. То есть городские_не_религиозные и сельские_религиозные.

После некоторого исследования на этом веб-сайте мне удалось создать новый столбец на основе комбинации двух столбцов с утверждением ifelse, но только для тех респондентов, которые удовлетворяют обоим условиям. Для всех остальных я попытался написать еще один оператор ifelse, но тогда он вернул только NA. Я мог бы дать всем респондентам с НО значение «Нет», но я хочу, чтобы НК были отделены от тех, которые имеют допустимые значения, но не удовлетворяют условиям. Таким образом, те, кто живет в городах и нерелигиозен, ответили «Да», все остальные респонденты - «Нет» и НП.

Вот образец моего набора данных и кода, который я использовал:

structure(list(urban_rural = structure(c(1L, 1L, 2L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 
1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Urban", 
"Rural", "Refugee camp"), class = "factor"), religious = structure(c(2L, 
1L, 2L, 2L, 3L, 2L, 2L, 3L, 1L, 3L, 3L, 1L, 3L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 2L, 3L, 2L, 2L, 2L, 
3L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 1L, 2L, 2L, 2L, 2L, 
1L), .Label = c("Religious", "Somewhat religious", "Not religious"
), class = "factor")), row.names = c(NA, 50L), class = "data.frame")

dataset$urban_not_reg <- ""

dataset <- dataset %>%
  mutate(urban_not_reg=ifelse((urban_rural=="Urban")&(religious=="Not religious"),"Yes",NA)) %>%
  mutate(urban_not_reg=ifelse((urban_rural=="Rural")&(urban_rural=="Refugee camp")&(religious=="Religious")&(religious=="Somewhat religious"),"No",NA))

person Nicosc    schedule 18.10.2020    source источник


Ответы (2)


Это работает:

> dataset %>% mutate(urban_not_reg = case_when(urban_rural == 'Urban' & religious == 'Not religious' ~ 'Yes',
+                                             (urban_rural == "Rural" & religious=="Religious") | 
+                                             (urban_rural == "Refugee camp" & religious=="Somewhat religious") | 
+                                             (urban_rural == "Rural" & religious=="Somewhat religious") |
+                                             (urban_rural == "Refugee camp" & religious=="Religious")  ~ 'No',
+                                              TRUE ~ NA_character_))
person Karthik S    schedule 18.10.2020

Вы можете назначить "No" всему, что не "Urban", после назначения "Yes".

library(dplyr)

dataset %>%
  mutate(urban_not_reg = case_when(urban_rural=="Urban" & religious == "Not religious" ~ "Yes", 
                                   urban_rural != "Urban" ~ "No", 
                                   TRUE ~ NA_character_))
person Ronak Shah    schedule 18.10.2020
comment
Спасибо! Но это дает мне только те, у которых есть Yes и NAs. Я хочу, чтобы другие респонденты с ценной ценностью не имели. - person Nicosc; 18.10.2020
comment
@Nicosc См. Обновленный ответ, если это то, что вы хотите? - person Ronak Shah; 18.10.2020