我有一个字符变量,其中有一些值我想用NA替换(例如,"N/a";"NA"作为文本输入,而不是R的NA类型;其他文本响应.)我不想被NA替换的值包含数字字符串,所以我try 使用正则表达式 Select 非数字字符串来替换为NA.
我可以使用以下方法过滤非数字 case ,或者如果我删除"!"的话,可以过滤数字字符串 case .我不知道如何将mutate()与if\u else()和str\u detect()结合使用,或将na\u if()与str\u detect()结合使用来替换这些情况.我只能用na_if()精确地指定用例来替换它们.
library(dplyr)
library(stringr)
df <- data.frame(var1 = c("84950", "NA", "N/A", "84596/03456", "55555", NA),
var2 = rep("10000", 6))
df %>%
filter(!str_detect(var1, "[:digit:]"))
这行不通.
df %>%
mutate(var1 = if_else(str_detect(var1, "[:digit:]"), var1, NA))
这不起作用,所有 case 都保持原样.
df %>%
mutate(var1 = na_if(var1, !str_detect(var1, "[:digit:]")))
这用于替换该特定值"不适用"
df %>%
mutate(var1 = na_if(var1, "N/A"))