如何在R的dataframe中基于外部列表创建条件匹配的新变量
R 基于外部分类列表为dataframe新增匹配变量的实现方法
首先修正示例代码的小问题:原代码中color向量的green、red误使用反引号包裹,替换为普通引号即可正常运行。
基础R实现(无需额外依赖)
通过构造查找表完成匹配,运行效率高:
# 构造示例数据 employee <- c('John Doe','Peter Gynn','Jolie Hope') salary <- c(21000, 23400, 26800) color <- c('blue', 'green', 'red') df <- data.frame(employee, salary, color) # 外部颜色分类列表 color_categories <- list(cold = c("blue", "green"), warm = c("red", "orange")) # 生成查找表并匹配 lookup <- stack(color_categories) df$category <- as.character(lookup$ind[match(df$color, lookup$values)])
运行后输出的df即可得到你需要的带category字段的结果。如果分类值需要保留因子类型,去掉as.character()即可。
tidyverse 生态实现(逻辑更直观)
适合已经在使用dplyr处理数据的场景:
library(dplyr) # 方法1:转换分类列表为关联表后左连接 category_df <- stack(color_categories) %>% rename(color = values, category = ind) %>% mutate(category = as.character(category)) df <- df %>% left_join(category_df, by = "color") # 方法2:直接调用预设的分类列表做规则匹配(适合分类数量少的场景) df <- df %>% mutate( category = case_when( color %in% color_categories$cold ~ "cold", color %in% color_categories$warm ~ "warm", .default = NA_character_ ) )
如果存在未出现在分类列表中的颜色值,上述两种方法都会默认返回NA,可根据需求调整默认值。
内容的提问来源于stack exchange,提问作者anais_xis
相关产品推荐
相关产品推荐

