如何从电话号码中提取国家码并生成新列(R语言实现)
从电话号码中提取指定国家码到新列
问题场景
现有电话号码数据集:
data <- data.frame(phone = c("+1 800 000 000", "+257000000000", "+91-00 000 00", "200000 000"))
需要从phone列中提取指定的国家码(如+1、+257、+91)到新列country_code,无匹配项时返回NA,期望结果如下:
phone country_code +1 800 000 000 +1 +257000000000 +257 +91-00 000 00 +91 200000 000 NA
解决方案
可以基于指定的国家码向量,通过正则匹配提取目标内容,分两种情况处理:
情况1:国家码向量带+符号
如果预先定义的国家码是带+的格式(如c("+1", "+257", "+91")),直接将向量拼接为正则备选模式,用str_extract提取:
library(dplyr) library(stringr) data <- data.frame(phone = c("+1 800 000 000", "+257000000000", "+91-00 000 00", "200000 000")) codes <- c("+1", "+257", "+91") data <- data |> mutate(country_code = str_extract(phone, str_c(codes, collapse = "|"))) # 输出结果 print(data)
情况2:国家码向量为纯数字
如果预先定义的国家码是纯数字格式(如c(1, 257, 91)),先给每个码添加^\+前缀(确保只匹配电话号码开头的+加国家码组合),再拼接为匹配模式:
library(dplyr) library(stringr) data <- data.frame(phone = c("+1 800 000 000", "+257000000000", "+91-00 000 00", "200000 000")) codes <- c(1, 257, 91) # 生成正则匹配模式,^限定匹配开头的内容 pattern <- str_c("^\\+", codes, collapse = "|") data <- data |> mutate(country_code = str_extract(phone, pattern)) # 输出结果 print(data)
关键说明
- 使用
str_c(codes, collapse = "|")将多个国家码拼接为+1|+257|+91的正则模式,实现多选项匹配 - 添加
^前缀是为了避免误匹配电话号码中间出现的类似数字组合,确保只提取开头的国家码
内容的提问来源于stack exchange,提问作者writer_typer
相关产品推荐
相关产品推荐

