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

R语言新手求助:如何在DataFrame中基于已有列创建基础颜色列

解决方案:根据色调值匹配基础颜色

下面提供两种常用的实现方式,适合R语言初学者:

方法一:基础R原生函数

无需额外安装包,直接用grepl()检测字符串包含关系,配合ifelse()嵌套判断:

步骤1:构造示例数据(可替换为你的真实数据框)

df <- data.frame(shade = c("浅粉色", "天蓝色", "草绿色", "深粉色", "藏蓝色", "橄榄绿"), stringsAsFactors = FALSE)

步骤2:新增基础颜色列

df$basic_colour <- ifelse(
  grepl("粉", df$shade), "PINK",
  ifelse(
    grepl("蓝", df$shade), "BLUE",
    ifelse(grepl("绿", df$shade), "GREEN", NA)
  )
)
  • grepl("关键词", 列名):返回布尔值,判断每个单元格是否包含指定关键词
  • 嵌套ifelse()按优先级依次匹配,未匹配项返回NA

方法二:使用tidyverse工具(推荐,代码更易读)

借助dplyr包的case_when(),条件逻辑更直观:

步骤1:安装并加载dplyr(首次使用需安装)

install.packages("dplyr")
library(dplyr)

步骤2:新增列

df <- df %>%
  mutate(
    basic_colour = case_when(
      grepl("粉", shade) ~ "PINK",
      grepl("蓝", shade) ~ "BLUE",
      grepl("绿", shade) ~ "GREEN",
      TRUE ~ NA_character_ # 处理所有不匹配的情况
    )
  )
  • case_when()支持多条件分支,按顺序匹配,TRUE ~ 结果作为默认兜底

适配英文色调值的情况

如果你的shade列是英文(比如"light pink"、"navy blue"),只需修改关键词并添加大小写忽略参数:

# 基础R版本
df$basic_colour <- ifelse(
  grepl("pink", df$shade, ignore.case = TRUE), "PINK",
  ifelse(
    grepl("blue", df$shade, ignore.case = TRUE), "BLUE",
    ifelse(grepl("green", df$shade, ignore.case = TRUE), "GREEN", NA)
  )
)

# tidyverse版本
df <- df %>%
  mutate(
    basic_colour = case_when(
      grepl("pink", shade, ignore.case = TRUE) ~ "PINK",
      grepl("blue", shade, ignore.case = TRUE) ~ "BLUE",
      grepl("green", shade, ignore.case = TRUE) ~ "GREEN",
      TRUE ~ NA_character_
    )
  )

内容的提问来源于stack exchange,提问作者LB2820

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:05:34