R - Grep включает значения NA в результаты - PullRequest
2 голосов
/ 27 апреля 2019

Я пытаюсь использовать grep для фильтрации моих данных, но также включаю NA в результаты, которые в настоящее время отбрасываются, поскольку они не соответствуют выражению grep.

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

Образец данных

   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

Код

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

Логические правила

1) Значение будет содержать от 0 до 5 числовых символов.

2) Три значения, которые должны бытьсохраняются:

a) Одна цифра данных.(Пример значений 2 и 3)

b) Нет данных или NA (Пример значений 5)

c) Пять цифр данных, но средние три цифры должны быть нулями.(Пример значений 1 и 4)

1 Ответ

3 голосов
/ 27 апреля 2019

Чтобы включить строки NA, создайте второе условие с помощью is.na и объедините их с помощью | (ИЛИ) на grepl

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)

данные

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"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...