You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于R语言实现两列多手机号的末9位匹配判断需求

R语言实现手机号匹配需求

以下是针对你需求的具体实现步骤,用新手易上手的dplyr和stringr包完成:

步骤1:加载依赖包

先安装并加载处理数据和字符串的工具包:

# 首次使用先安装包
install.packages(c("dplyr", "stringr"))
# 加载包
library(dplyr)
library(stringr)

步骤2:模拟测试数据

先构造和你示例类似的测试数据,方便验证效果:

test_df <- tibble(
  Phones = c("881234567; 665553331;", "123456789; 987654321;", "555111222"),
  e_phone = c("881234567", "1234567890", "666777888")
)

步骤3:核心匹配逻辑

用mutate新增列,通过字符串处理完成匹配判断:

result_df <- test_df %>%
  rowwise() %>%
  mutate(
    # 拆分Phones列的手机号,去除空格和末尾分号
    phones_list = str_split(str_remove(Phones, ";$"), "; ") %>% unlist(),
    # 拆分e_phone列的手机号,提取每个手机号的末9位
    e_phone_last9 = str_split(e_phone, "; ") %>% 
      unlist() %>% 
      str_sub(start = -9) %>% 
      unique(),
    # 判断是否有匹配,有则YES,否则NO
    e_phone_match = ifelse(any(e_phone_last9 %in% phones_list), "YES", "NO")
  ) %>%
  # 移除中间临时列,保留原列和结果列
  select(-phones_list, -e_phone_last9)

运行结果

执行后result_df的输出如下:

Phonese_phonee_phone_match
881234567; 665553331;881234567YES
123456789; 987654321;1234567890YES
555111222666777888NO

代码说明

  • rowwise():逐行处理数据,因为每行的手机号列表都是独立的
  • str_remove(Phones, ";$"):去除Phones列末尾可能多余的分号
  • str_split(..., "; "):把分号加空格分隔的手机号拆分成列表
  • str_sub(start = -9):提取字符串的最后9个字符,也就是手机号末9位
  • any(e_phone_last9 %in% phones_list):判断e_phone的末9位是否在Phones的手机号列表中存在匹配

内容的提问来源于stack exchange,提问作者sebekkg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 04:08:26