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
相关产品推荐
相关产品推荐

