基于tibble列部分匹配修改分类列值时非匹配项变NA问题求助
问题原因及解决方法
问题根源
你代码里的mutate(catag = "Uncategorised")通过管道输出到print,但没有将结果重新赋值给f2,导致原数据框f2根本没添加catag列。后续直接用f2$catag[...]赋值时,R会自动创建catag列,未被赋值的位置默认填充NA,这就是非匹配项变成NA的原因。
修正方案
方案1:修正原代码的赋值问题
把mutate后的结果存回f2,再进行后续修改:
free <- c("journal & radius wear damage","residual magnetism","damaged wheel","gouge in edge","wheel seat") f2 <- tibble(free) # 将mutate的结果重新赋值给f2 f2 <- f2 %>% mutate(catag = "Uncategorised") # 匹配含'wheel'的项并修改 f2$catag[grepl("wheel", f2$free)] <- "Wheel related issue" print(f2)
方案2:用dplyr风格统一处理(更推荐)
直接在管道里用case_when完成条件赋值,避免混合使用基础R和tidyverse语法:
free <- c("journal & radius wear damage","residual magnetism","damaged wheel","gouge in edge","wheel seat") f2 <- tibble(free) %>% mutate(catag = case_when( grepl("wheel", free) ~ "Wheel related issue", TRUE ~ "Uncategorised" # 其他情况保留默认值 )) print(f2)
运行结果
两种方案都会得到正确输出:
| free | catag |
|---|---|
| journal & radius wear damage | Uncategorised |
| residual magnetism | Uncategorised |
| damaged wheel | Wheel related issue |
| gouge in edge | Uncategorised |
| wheel seat | Wheel related issue |
内容的提问来源于stack exchange,提问作者fake fake
相关产品推荐
相关产品推荐

