如何将没有正好 10 位数字的电话号码替换为 NA
c(99887766, 998877665521, 9897932453)
预期产出:
NA, NA, 9897932453
我们使用nchar
创建一个逻辑向量,并将没有 10 个字符的向量赋值为 NA
v1[nchar(v1) != 10] <- NA
v1
#[1] NA NA 9897932453
或者另一种选择是
v1[!grepl('^.{10}$', v1)] <- NA
数据
v1 <- c(99887766, 998877665521, 9897932453)
使用简单的数学运算。我们知道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 进行比较。
一种方法是使用函数is.na<-
。
就像帮助页面所说的那样,value
是函数参数的索引向量。在本例中为逻辑索引。
v1 <- c(99887766, 998877665521, 9897932453)
is.na(v1) <- nchar(v1) != 10
v1
#[1] NA NA 9897932453
您可以使用ifelse()
:
phones <- c(99887766, 998877665521, 9897932453)
ifelse(nchar(phones) != 10, NA, phones)
[1] NA NA 9897932453