R语言使用else语句实现值转换与未匹配值置空操作
你可以直接用dplyr::recode()内置的.default参数实现需求,该参数的取值会自动应用到所有没有在规则中匹配到的元素,无需逐个声明未匹配值的转换规则。
另外你原示例代码存在两处小问题需要修正:
- 拼写错误:原数据中类别为
virginica,你写的verginica缺少字母r,会导致匹配失败 - 语法错误:
recode的参数之间缺少逗号,函数体也缺少闭合括号
修正后的完整可运行代码如下:
library(dplyr) # 定义转换函数 translate <- function(x) { x %>% recode( "setosa" = "good", "virginica" = "bad", .default = "" # 所有未匹配的取值统一设为空字符串 ) } # 测试调用 result <- translate(Species) # 可执行以下代码验证效果 unique(result)
如果你偏好使用基础R实现,不需要依赖dplyr包,可以用命名向量匹配的方式实现相同效果:
translate <- function(x) { # 定义转换规则 trans_rule <- c("setosa" = "good", "virginica" = "bad") # 匹配取值,未匹配的会返回NA res <- trans_rule[x] # 将NA替换为空字符串 res[is.na(res)] <- "" return(res) }
内容的提问来源于stack exchange,提问作者Robbie Voort
相关产品推荐
相关产品推荐

