Почему функции регулярного выражения, такие как gsub () в R, не идентифицируют NA? - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь заменить NA, используя regex функции, такие как gsub -

Пример данных-

a<-c(NA,1:5,NA,NA,1:3, rep(NA,round(runif(1,0,100))))

Как определить NA в pattern соответствующем поле.

Например, 101- *

Примечание. Я знаю другие способы замены NA, но я пытаюсь определить NA, используя regex.

РЕДАКТИРОВАТЬ - я хочу понять, почему регулярное выражение не идентифицирует NA?

Ответы [ 2 ]

8 голосов
/ 10 апреля 2019

Не используйте gsub() или другие функции reg.exp - NA уже идентифицируется , поэтому используйте is.na().

Пример

R> a<-c(NA,1:5,NA,NA,1:3, rep(NA,round(runif(1,0,100))))
R> a
 [1] NA  1  2  3  4  5 NA NA  1  2  3 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[30] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
R> a[is.na(a)] <- 42
R> a
 [1] 42  1  2  3  4  5 42 42  1  2  3 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42
[30] 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42
R> 

Здесь мы просто индексируем вектор a по is.na(a) и, чтобы упростить его, просто присваиваем этим значениям новое значение.

Короче говоря, не путайте «текст» NA, отображаемый при печати фактического значения NA, с условием NA.

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

Как уже отмечали другие, не используйте gsub. Вы можете использовать функцию replace_na из пакета tidyr.

library(tidyr)
a<-c(NA,1:5,NA,NA,1:3, rep(NA,round(runif(1,0,100))))
replace_na(a, 0)
# [1] 0 1 2 3 4 5 0 0 1 2 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 #0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 # 0 0 0 0 0 0
# [84] 0 0 0 0 0 0 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...