R - Grep在结果中包含NA值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R - Grep在结果中包含NA值相关的知识,希望对你有一定的参考价值。

我试图使用grep来过滤我的数据,但也在结果中包含NA,这些NA当前被删除,因为它们与grep表达式不匹配。

platform        x86_64-w64-mingw32
version.string  R version 3.5.3 (2019-03-11)

Sample data

   value expected_result actual_result
1  10001            Pass          Pass             
2      0            Pass          Pass
3      6            Pass          Pass
4  20004            Pass          Pass
5     NA            Pass          Fail
6   4829            Fail          Fail
7    521            Fail          Fail
8     89            Fail          Fail
9  40012            Fail          Fail
10 47321            Fail          Fail

Code

df <- df[grep("(\b\d{1}\b)|([0-9]{1}[0]{3}[0-9]{1})", df$value),]

Logic rules

1)该值将包含0到5个数字字符。

2)应保留的三个值是:

a)一位数据。 (示例值2和3)

b)无数据或NA(示例值5)

c)五位数据但中间三位数必须全为零。 (示例值1和4)

答案

要包含NA行,请使用is.na创建第二个条件,并将其与|上的grepl(OR)连接起来

df[grepl("(\b\d{1}\b)|([0-9]{1}[0]{3}[0-9]{1})", df$value)|is.na(df$value),]
#   value expected_result actual_result
#1 10001            Pass          Pass
#2     0            Pass          Pass
#3     6            Pass          Pass
#4 20004            Pass          Pass
#5    NA            Pass          Fail

或者让它更紧凑

grepl("^\d$|^([1-9]0{3}[1-9]$)", df$value)|is.na(df$value)

data

df <- structure(list(value = c(10001L, 0L, 6L, 20004L, NA, 4829L, 521L, 
89L, 40012L, 47321L), expected_result = c("Pass", "Pass", "Pass", 
"Pass", "Pass", "Fail", "Fail", "Fail", "Fail", "Fail"), actual_result = c("Pass", 
"Pass", "Pass", "Pass", "Fail", "Fail", "Fail", "Fail", "Fail", 
"Fail")), class = "data.frame", row.names = c("1", "2", "3", 
"4", "5", "6", "7", "8", "9", "10"))

以上是关于R - Grep在结果中包含NA值的主要内容,如果未能解决你的问题,请参考以下文章

r 在R中的table()函数中包含NA

在数据框的选定列中包含 NA(缺失)值的行子集

R语言sum函数:sum函数计算dataframe数据列的加和sum函数计算列表list的加和(数据中包含NA的情况)sum函数计算列表list的加和

在代码片段中包含类型转换

删除r中包含某些字符串的变量[重复]

如何在ifelse中包含NA?