首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用旧变量的观测值创建新变量?

如何使用旧变量的观测值创建新变量?
EN

Stack Overflow用户
提问于 2021-03-18 23:56:15
回答 4查看 72关注 0票数 0

我有一个数据集,其中的教育变量是从1到18的数字编码,每个数字代表一个不同的教育资格。我想创建一个新的变量,其中将有五个类别,从没有资格到研究生。在这五个类别中的每一个类别中,我想将一些旧的教育资格合并为一个。例如,我希望1,2,3 =中学教育。

EN

回答 4

Stack Overflow用户

发布于 2021-03-19 00:10:46

使用一些ifelse语句可以实现这一点。

一个使用dplyr包的答案:

代码语言:javascript
运行
复制
yourdata%>%
    mutate(New_Category=ifelse(OldCategory %in% c(1,2,3),"Category1",
                    ifelse(OldCategory %in% c(4,7,9),"Category2",
                    ifelse(OldCategory %in% c(5,6,8),"Category3",
                    ifelse(OldCategory %in% c(10,11,12,13,14),"Category4",
                    ifelse(OldCategory %in% c(15,16,17,18),"Category5","Unknown"))))))

你可以在这里灵活地按你想要的方式分组。本质上,这将检查第一个语句是否为真,如果是,则将"Category1“作为新New_Category列的值。如果不是,则继续执行下一条ifelse语句。

在嵌套的ifelse中,您需要的最后一件事是,如果所有条件检查都不成立,则放置该值。在上面的例子中,我使用了"Uknown“。

我建议避免跳过显式命名"Category5“的条件的倾向,并将其用作”如果上面的任何其他事情都不是真的“值,就像有些人所做的那样。如果您这样做,您将冒着空白或超出范围的值被转换为"Category 5“的风险,因此,如果您选择按类别或诸如此类的方法计算记录数,将无法进行可靠的错误检查。

票数 2
EN

Stack Overflow用户

发布于 2021-03-19 00:27:54

这是base R的另一个选择,它不如Pake的dplyr解决方案优雅,但如果你还不熟悉tidyverse语言,它可能会更容易理解。

代码语言:javascript
运行
复制
##Creating some Fake Data##
Ed_1<-c(1:18) #Numeric Education Variable
Ed_cat<-c("No_High_School_Diploma","GED_or_High_School_Diploma", "Some_College", "College_Degree", "PostGraduate") #Categorical Education Variable
ED<-data.frame(Education_Level = sample(Ed_1, 100, replace = TRUE)) #A random example dataset

##Creating a new column, and adding categorical data##
ED[,"Education_Group"]<-NULL
ED$Education_Group[ED$Education_Level %in% c(1:3)]<-Ed_cat[1]
ED$Education_Group[ED$Education_Level %in% c(4:7)]<-Ed_cat[2]
ED$Education_Group[ED$Education_Level %in% c(8:11)]<-Ed_cat[3]
ED$Education_Group[ED$Education_Level %in% c(12:15)]<-Ed_cat[4]
ED$Education_Group[ED$Education_Level %in% c(16:18)]<-Ed_cat[5]

##Viewing the results##
ED$Education_Group

诀窍是使用方括号语法,在R中表示“选择”,然后使用赋值箭头赋值一个新值。

分解这行代码

代码语言:javascript
运行
复制
ED$Education_Group[ED$Education_Level %in% c(16:18)]<-Ed_cat[5]

ED$Education_Group表示“选择Education_Group列作为向量”[ED$Education_Level %in% c(16:18)]表示“其中同一行中Education_Level的相应值在集合{16,17,18}”<-Ed_cat[5]表示“将这些值分配给Ed_cat向量的第五个元素”

通俗易懂地说,这一整行代码的意思是“16到18岁之间的任何教育水平都应该被指定为‘研究生’作为它的教育组。”小心点,-Sean

票数 2
EN

Stack Overflow用户

发布于 2021-03-19 00:23:52

尝试如下所示的case_when函数:

代码语言:javascript
运行
复制
library(dplyr)
data %>% mutate(new_education = case_when(
      education %in% c(1:3) ~ "Category 1",
      education %in% c(4:6) ~ "Category 2",
      education %in% c(7:9) ~ "Category 3",
      education %in% c(10:12) ~ "Category 4",
      education %in% c(13:15) ~ "Category 5",
      education %in% c(16:18) ~ "Category 6",
      TRUE ~ "No category"))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66694601

复制
相关文章

相似问题

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