You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 10:46:08