r - 如何用 NA、na_if、if_else、regex 替换某些字符串

我有一个字符变量,它有一些我想用 NA 替换的值(例如“N/A”;“NA”作为文本输入,而不是 R 的 NA 类型;其他文本响应。)我不想要的值替换为 NA 包含数字字符串,因此我尝试使用正则表达式来选择要替换为 NA 的非数字字符串。

我可以使用以下内容过滤非数字大小写,或者如果我删除“!”,则可以过滤数字字符串大小写。我无法弄清楚如何将 mutate() 与 if_else() 和 str_detect() 或 na_if() 与 str_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))

这行不通,所有情况保持原样。

df %>% 
  mutate(var1 = na_if(var1, !str_detect(var1, "[:digit:]"))) 

这用于替换这个特定值“N/A”

df %>% 
  mutate(var1 = na_if(var1, "N/A"))

最佳答案

您的第二种方法很接近。您需要指定 NA 是字符类型。

df |>
  mutate(var1 = if_else(str_detect(var1, "[:digit:]"), var1, NA_character_))

输出:

         var1  var2
1       84950 10000
2        <NA> 10000
3        <NA> 10000
4 84596/03456 10000
5       55555 10000
6        <NA> 10000

https://stackoverflow.com/questions/72995834/

相关文章:

c - 这两个初始化是等价的吗?

c++ - 尽管类型删除,是否可以使用静态多态性(模板)?

awk - 在列中找到确切的字符串

sql - 甲骨文 SQL : SUM in first row with condition

r - 如何制作渐变彩虹调色板图?

windows - 在 3 个不同的子目录中创建 2 个子目录

c++ - 第二次编译时更改随机生成数字的值

java - 如何修复 java.lang.ClassNotFoundException : org

java - Java 17 中的线程安全随机生成器

java - 比较不同时区的 ZoneDdateTime