【问题标题】:Create new column with ifelse statement based on combination with other columns in R基于与 R 中其他列的组合,使用 ifelse 语句创建新列
【发布时间】:2020-10-18 12:25:41
【问题描述】:

我有一个包含 Urban_rural 和宗教两列的数据集。我想根据这两列之间的两个特定交互创建一个新列。即urban_not_religious 和rural_religious。

在对这个网站进行了一些研究之后,我设法根据两列与 ifelse 语句的组合创建了一个新列,但仅适用于同时满足这两个条件的受访者。对于所有其他人,我尝试编写另一个 ifelse 语句,但它只返回 NA。我可以为所有具有 NA 的受访者提供“否”的值,但我希望将 NA 与那些具有有效值但不满足条件的受访者分开。因此,那些居住在城市地区且不信教的人选择“是”,所有其他受访者选择“否”,以及 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))

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    这行得通吗:

    > 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_))
    

    【讨论】:

      【解决方案2】:

      您可以在分配"Yes" 后将"No" 分配给不是"Urban" 的任何内容。

      library(dplyr)
      
      dataset %>%
        mutate(urban_not_reg = case_when(urban_rural=="Urban" & religious == "Not religious" ~ "Yes", 
                                         urban_rural != "Urban" ~ "No", 
                                         TRUE ~ NA_character_))
      

      【讨论】:

      • 谢谢!但这确实只给了我那些“是”和 NA 的人。我想让其他有价值的受访者回答“不”。
      • @Nicosc 如果这是您想要的,请查看更新的答案?
      猜你喜欢
      • 1970-01-01
      • 2022-09-23
      • 1970-01-01
      • 1970-01-01
      • 2015-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-29
      相关资源
      最近更新 更多