首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将3个分类变量转换为1个虚拟变量,并使用mutate和ifelse函数

将3个分类变量转换为1个虚拟变量,并使用mutate和ifelse函数
EN

Stack Overflow用户
提问于 2019-09-14 19:59:18
回答 1查看 83关注 0票数 0

我有一个社会调查的数据。其中一个分类变量是教育。它将人口分为6组:"1“表示受过小学教育的人,"2”表示具有O级水平的人,"3“表示受过中学教育的人。学士学位4分。硕士5人,PhD 6人。

代码语言:javascript
复制
   wage age sex edu area satisf
1    NA  76   2   6    1   <NA>
2 17000  26   2   6    1      1
3    NA  74   1   6    1   <NA>
4    NA  73   2   6    1   <NA>
5    NA  49   2   5    1      1
6 25000  31   1   6    1      2

我之前运行了一个回归,并决定我不需要类别1-3。因此,我希望有以下结构:

代码语言:javascript
复制
DUMMY1(edu)={█(1,&edu="1" ,2,3@0,&edu=else)┤

DUMMY2(edu)={█(1,&edu="4" @0,&edu=else)┤

DUMMY3(edu)={█(1,&edu="5" @0,&edu=else)┤

DUMMY4(edu)={█(1,&edu="6" @0,&edu=else)┤

我需要学习如何使用mutate和ifelse函数。我当前的命令如下:

代码语言:javascript
复制
vova5 <- mutate(vova4,bedu=ifelse(vova4$edu<=3,vova4$edu2 <- 1,
                                   vova4$edu2 <- vova4$edu-2))

但它似乎不起作用。

EN

回答 1

Stack Overflow用户

发布于 2019-09-14 20:20:54

如果没有你的数据,我会尝试case_when,比如:

数据示例:

代码语言:javascript
复制
vova4 <- data.frame(
  edu = c(1, 2, 3, 4, 4, 5, 5, 6, 6), 
  age = c(70, 56, 66, 67, 34, 55, 33, 44, 32))

试试这个:

代码语言:javascript
复制
library(tidyverse)
vova5 <- vova4 %>% 
  mutate(Bedu = case_when(edu<=3 ~ 1, 
         edu==4 ~ 2, 
         edu==5 ~ 3, 
         TRUE ~ 4)) 

vova5

或者:

代码语言:javascript
复制
vova5 <- vova4 %>% 
  mutate(Bedu = case_when(edu<=3 ~ 1, 
         edu==4 ~ 2, 
         edu==5 ~ 3, 
         edu==6 ~ 4)) 

您将获得:

代码语言:javascript
复制
> vova5
  edu age Bedu
1   1  70    1
2   2  56    1
3   3  66    1
4   4  67    2
5   4  34    2
6   5  55    3
7   5  33    3
8   6  44    4
9   6  32    4
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57935284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档