使用通配符在整个数据框中替换为 NA

Ber*_*d G 1 replace r wildcard dataframe na

我有一个像这样的数据框 df

第 1 列 第2栏 第3栏
1 2 5
6 x1A 9
8 x3 7
5 3 x4Z

我想替换所有以 开头的XNA。结果应该是

第 1 列 第2栏 第3栏
1 2 5
6 不适用 9
8 不适用 7
5 3 不适用

我尝试了不同的解决方案但没有成功:

df[-grep(pattern = "X^",df),]    
df %>% mutate_all(~na_if(.,"X*"))    
df%>% mutate_all(~na_if(.,matches("X*")))    
df %>% mutate_all(~na_if(.,glob2rx("X*")))
Run Code Online (Sandbox Code Playgroud)

All*_*ron 5

使用as.numeric会自动将以“X”开头的任何内容转换为NA,同时将其他所有内容转换为数字。唯一的缺点是解析失败时会发出警告,因此一个(安静的)单行 tidyverse 解决方案是:

df %>% mutate(across(everything(), ~suppressWarnings(as.numeric(.x))))
#>   Col1 Col2 Col3
#> 1    1    2    5
#> 2    6   NA    9
#> 3    8   NA    7
#> 4    5    3    4
Run Code Online (Sandbox Code Playgroud)

创建于 2023-09-29,使用reprex v2.0.2