Замените телефонные номера не имеющие ровно 10 цифр - PullRequest
0 голосов
/ 24 мая 2018

Как заменить номера телефонов, не имеющие ровно 10 цифр, на NA

c(99887766, 998877665521, 9897932453)

Ожидаемый результат:

NA, NA, 9897932453

Ответы [ 4 ]

0 голосов
/ 24 мая 2018

Вы можете использовать ifelse():

phones <- c(99887766, 998877665521, 9897932453)

ifelse(nchar(phones) != 10, NA, phones)

[1]         NA         NA 9897932453
0 голосов
/ 24 мая 2018

Одним из способов является использование функции is.na<-.
Как сказано на странице справки, value - это индексный вектор в аргументе функции.В этом случае логический индекс.

v1 <- c(99887766, 998877665521, 9897932453)

is.na(v1) <- nchar(v1) != 10
v1
#[1]         NA         NA 9897932453
0 голосов
/ 24 мая 2018

Используйте простую математику.Мы знаем, что log10(1000000000) равно 9, а log10(10000000000) равно 10. Таким образом:

v1 <- c(99887766, 998877665521, 9897932453)
is.na(v1) <- log10(v1) >= 10 | log10(v1) < 9
v1
#[1]         NA         NA 9897932453

Я предполагаю, что на входе не будет десятичных дробей.

PS: Вы неТ даже не нужен журнал.Вы также можете сравнить с 1e9 и 1e10.

0 голосов
/ 24 мая 2018

Мы создаем логический вектор, используя nchar, и присваиваем те, у которых нет 10 символов, как NA

v1[nchar(v1) != 10] <- NA
v1
#[1]         NA         NA 9897932453

. Или другой вариант

v1[!grepl('^.{10}$', v1)] <- NA

data

v1 <- c(99887766, 998877665521, 9897932453)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...