从具有不同电话号码类型的列中排除特定的国家/地区电话号码

时间:2019-02-01 15:25:49

标签: r

我在从列中排除特定国家/地区电话号码时遇到问题。问题是它们的格式不相同,有些国家/地区的国家/地区代码为3位,例如:“ 001”,其他国家/地区的国家/地区是4位数字,例如:“ 0098” 样本:

00989121234567
009809121234567
989121234567
9121234567
09121234567   

首先,我需要将所有这些格式转换为1种格式,然后将其排除在该列之外。输出电话号码必须采用以下格式:

"989121234567"

2 个答案:

答案 0 :(得分:0)

如果您将包含电话号码的矢量定义为数字,则前面的零将被删除,然后您可以随意删除不需要的数字。

使用提供的数字:

nr <- c(00989121234567,009809121234567,989121234567,9121234567,09121234567)
nr
[1] 9.891212e+11 9.809121e+12 9.891212e+11 9.121235e+09 9.121235e+09


subset(nr,!grepl("^98",nr))
[1] 9121234567 9121234567

编辑:我看到您添加了返回字符向量的要求。您可以只在最终向量上使用as.character()函数。

答案 1 :(得分:0)

您可以为此使用startsWithsubstr(或gsub也可以)。但是首先,您需要一个带有前缀的数组:

# variables
country_codes <- c('1', '98')
prefix <- union(country_codes, paste0('00', country_codes))
numbers <- c('00989121234567','009809121234567','989121234567','9121234567','09121234567')

# get rid of prefix
new_numbers <- character(length(numbers))
for (k in seq_along(prefix)) {
  ind <- startsWith(numbers, prefix[k])
  new_numbers[ind] <- substr(numbers[ind], nchar(prefix[k]) + 1, nchar(numbers[ind]))
}
new_numbers[new_numbers == ""] <- numbers[new_numbers == ""]
# results
new_numbers
# [1] "9121234567"  "09121234567" "9121234567"  "9121234567"  "09121234567"

然后您可以添加新的国家/地区代码,例如44,31等,也可以在paste0('+', country_codes)中添加prefix来处理+1xxxx形式的数字。