我有一个字符变量,其中有一些值我想用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"))

推荐答案

你的第二种方法很接近.您需要指定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

R相关问答推荐

rvest函数read_html_live()不允许html_elements()正确读取

在Julia中调用R函数

卸载安装了BRM的模型发出的警告

隐藏e_mark_line的工具提示

在数学中正确显示摄氏度、开氏度或华氏度

基于多列将值链接到NA

如何动态更新selectizeInput?

如何改变时间图R中的悬停信息?

par函数中的缩写,比如mgp,mar,mai是如何被破译的?

使用列/行匹配将两个不同维度的矩阵相加

在RStudio中堆叠条形图和折线图

LOF中的插图短文字幕

正则表达式在第二个管道和第二个T之后拆分R中的列

使用geom_iles在一个切片中包含多个值

如何在反曲线图中更改X标签

将列的值乘以在不同数据集中找到的值

按组和连续id计算日期差

如何从嵌套数据中自动创建命名对象?在R中

为什么将负值向量提升到分数次方会得到NaN

网络抓取NBA.com