是否存在R函数可对所有列执行相同筛选命令批量提取URL
解决方案
你可以通过批量迭代函数一次性完成250个对象的匹配提取,无需逐个手动编写grep语句,以下是R语言的实现方法:
如果你是将250个人名对应数据统一存储在Excel中
步骤1:导入Excel数据集
使用readxl包读取Excel文件,假设文件中存储待匹配文本的列名为content,存储人名的列名为person_name:
# 首次使用先安装依赖包 install.packages("readxl") library(readxl) # 导入数据到数据框 df <- read_excel("你的本地Excel文件路径.xlsx")
步骤2:批量提取匹配URL
两种常用实现方式任选其一即可:
- 方式1:Base R原生
sapply函数实现
# 逐行匹配所有带.gob.mx的URL,结果存入新列 df$matched_urls <- sapply(df$content, function(x) grep("\\.gob\\.mx", x, value = TRUE))
提示:正则表达式中的
.需要转义为\\.,才能精准匹配点号,避免误匹配任意字符。
- 方式2:
purrr包map函数实现(更适合后续结构化处理)
# 首次使用先安装依赖包 install.packages("purrr") library(purrr) df$matched_urls <- map(df$content, ~grep("\\.gob\\.mx", .x, value = TRUE))
步骤3:结果导出
处理完成后可直接导出为Excel文件留存:
install.packages("writexl") library(writexl) write_xlsx(df, "URL匹配结果.xlsx")
如果需要将每个URL单独拆分为一行存储,可使用tidyr的unnest函数处理:
library(tidyr) df_long <- unnest(df, matched_urls)
如果你目前是250个独立的人名向量(和你示例的Alejandro Díaz Domínguez向量形式一致)
可以先将所有向量存入命名列表后批量处理,无需逐个调用:
# 方式1:如果向量名有统一规律,直接批量提取 all_name_vecs <- mget(ls(pattern = "向量名共同前缀/后缀")) # 方式2:无统一规律时手动构造列表 # all_name_vecs <- list( # `Alejandro Díaz Domínguez` = `Alejandro Díaz Domínguez`, # `第二个名字` = `第二个名字`, # # 剩余名字依次录入即可 # ) # 批量匹配所有URL result_all <- lapply(all_name_vecs, function(x) grep("\\.gob\\.mx", x, value = TRUE))
内容的提问来源于stack exchange,提问作者Marcela Marroquín
相关产品推荐
相关产品推荐

