【问题标题】:Creating a new variable under conditions of other two variables在其他两个变量的条件下创建一个新变量
【发布时间】:2020-02-05 22:11:18
【问题描述】:

我试图在其他变量的某些条件下在数据集中创建一个新变量。基本上,我想简化关于父母教育的信息,即父母之间的分离,并创建一个新的信息,考虑到父母的最高教育水平。例如,如果父亲受教育程度为 1,母亲受教育程度为 0,则新变量中该行的值为 1。

我正在尝试将 mutate()case_when() 函数一起使用,该函数在另一个变量中有效,但我不明白为什么现在不行。当我尝试时,它会创建一个只有 NA 的列,当我从中打印一个表时,结果是:

我用于条件的两个变量的类是“labelled”和“factor”。

首先,我尝试了以下命令(我正在简化代码):

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

那么,我做错了什么?非常感谢。

【问题讨论】:

    标签: dplyr case-when


    【解决方案1】:

    您可以使用这些值。希望这可以帮助。

    #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
    

    【讨论】:

    • 非常感谢,我得到了我想要的结果。所以这意味着mutatecase_when 只适用于数值变量?
    猜你喜欢
    • 2011-02-26
    • 1970-01-01
    • 2022-07-15
    • 1970-01-01
    • 2019-08-16
    • 2021-02-10
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    相关资源
    最近更新 更多