如何在R中根据code列值为数据框新增faculty列
R语言:根据代码列表新增分类列
原始数据
首先是你给出的数据框和分类代码列表:
# 原始数据框 code = c("BIOL", "HIST","ECON","ANTH","FREN","MGMT") Room = c("A", "B", "A","B","C","C") df <- data.frame(code, Room) # 各学院对应代码列表 Sci_codes = c("BIOL", "ANTH", "FREN") art_codes = c("Hist", "MYTH") business_codes = c("ECON", "MGMT")
需求说明
需要给数据框新增一列faculty,按照以下规则赋值:
- 若
code列的值属于Sci_codes,返回"Sci" - 若属于
art_codes,返回"Art" - 若属于
business_codes,返回"Business"
注意:你的art_codes里是"Hist",但数据框里是"HIST",所以需要处理大小写不敏感的匹配问题,否则无法正确匹配。
解决方案
方法1:使用tidyverse的dplyr包(推荐,语法更直观)
如果还没安装dplyr,先安装并加载:
install.packages("dplyr") library(dplyr)
然后用mutate和case_when实现分类:
df <- df %>% mutate(faculty = case_when( # 统一转大写,避免大小写差异导致匹配失败 toupper(code) %in% toupper(Sci_codes) ~ "Sci", toupper(code) %in% toupper(art_codes) ~ "Art", toupper(code) %in% toupper(business_codes) ~ "Business" ))
方法2:基础R实现(无需额外安装包)
通过转大写统一格式,再用嵌套ifelse完成赋值:
# 统一转成大写,消除大小写差异 code_upper <- toupper(df$code) sci_upper <- toupper(Sci_codes) art_upper <- toupper(art_codes) business_upper <- toupper(business_codes) # 嵌套ifelse判断赋值 df$faculty <- ifelse(code_upper %in% sci_upper, "Sci", ifelse(code_upper %in% art_upper, "Art", ifelse(code_upper %in% business_upper, "Business", NA)))
最终结果
执行后的数据框如下:
> df code Room faculty 1 BIOL A Sci 2 HIST B Art 3 ECON A Business 4 ANTH B Sci 5 FREN C Sci 6 MGMT C Business
内容的提问来源于stack exchange,提问作者user23654369
相关产品推荐
相关产品推荐

