我在从列中排除特定国家/地区电话号码时遇到问题。问题是它们的格式不相同,有些国家/地区的国家/地区代码为3位,例如:“ 001”,其他国家/地区的国家/地区是4位数字,例如:“ 0098” 样本:
00989121234567
009809121234567
989121234567
9121234567
09121234567
首先,我需要将所有这些格式转换为1种格式,然后将其排除在该列之外。输出电话号码必须采用以下格式:
"989121234567"
答案 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)
您可以为此使用startsWith
和substr
(或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
形式的数字。