如何在R语言中根据另一列值填充Category列的空白值
批量填充数据框中Category列的BLANK值
示例数据代码
category <- c("East","BLANK","NorthEast","BLANK","BLANK") subcat <- c("East","North","SW","NE","SE") data1 <- as.data.frame(category) data1$subcat <- subcat
原始数据表格
| Category | Subcat |
|---|---|
| East | East |
| BLANK | North |
| NorthEast | SW |
| BLANK | NE |
| BLANK | SE |
规则与需求
- 规则:East类别对应subcat为East、North的行;NorthEast类别对应subcat为SW、NE、SE的行
- 需求:批量将Category列中的BLANK值按上述规则填充,填充后的行用*标注(仅用于展示区分)
批量处理方案
方法1:Base R 实现
无需额外安装包,直接用基础R语法实现:
# 定义subcat到category的映射规则 cat_mapping <- list( East = c("East", "North"), NorthEast = c("SW", "NE", "SE") ) # 生成subcat到category的反向映射表 reverse_map <- unlist(lapply(names(cat_mapping), function(cat) { setNames(rep(cat, length(cat_mapping[[cat]])), cat_mapping[[cat]]) })) # 替换BLANK值 data1$category <- ifelse(data1$category == "BLANK", reverse_map[data1$subcat], data1$category)
方法2:dplyr 实现(可读性更强)
如果习惯使用tidyverse生态,用dplyr的case_when语法更直观:
library(dplyr) data1 <- data1 %>% mutate( category = case_when( subcat %in% c("East", "North") ~ "East", subcat %in% c("SW", "NE", "SE") ~ "NorthEast", TRUE ~ category # 保留原有非BLANK的Category值 ) )
处理后结果
| Category | Subcat |
|---|---|
| East | East |
| East | North |
| NorthEast | SW |
| NorthEast | NE |
| NorthEast | SE |
内容的提问来源于stack exchange,提问作者chriswang123456
相关产品推荐
相关产品推荐

