如何用R批量从URL中提取指定数字(支持万级链接)
用R语言提取链接末尾数字的实现方案
我拥有如下格式的链接地址:
"https://vdp.cuzk.cz/vdp/ruian/stavebniobjekty/10651624"
"https://vdp.cuzk.cz/vdp/ruian/stavebniobjekty/12488284124"
期望提取链接末尾的数字,输出结果如下:10651624 12488284124请问能否使用R语言实现该功能?是否支持批量处理(如10000条链接),能否通过循环完成?
完全可以用R语言实现这个需求,而且轻松支持批量处理(包括10000条链接的规模),既可以用循环,也可以用更高效的向量式操作(R中更推荐后者,速度更快)。
方法一:向量式操作(推荐,高效)
利用字符串处理函数直接对整个链接向量进行处理,无需循环,是R中最适合批量数据的处理方式。
使用stringr包(简洁直观)
stringr是tidyverse生态下的字符串处理包,语法简洁易读:
# 安装并加载包(首次使用需安装) install.packages("stringr") library(stringr) # 模拟批量链接数据(替换为你的实际链接向量即可) links <- c( "https://vdp.cuzk.cz/vdp/ruian/stavebniobjekty/10651624", "https://vdp.cuzk.cz/vdp/ruian/stavebniobjekty/12488284124" ) # 提取末尾数字:正则表达式\\d+$匹配字符串结尾的所有数字 extracted_numbers <- str_extract(links, "\\d+$") # 输出结果 cat(extracted_numbers, sep = "\n")
使用基础R函数(无需额外安装包)
如果不想安装第三方包,用基础R的sub函数也能实现:
links <- c( "https://vdp.cuzk.cz/vdp/ruian/stavebniobjekty/10651624", "https://vdp.cuzk.cz/vdp/ruian/stavebniobjekty/12488284124" ) # 正则表达式匹配最后一个斜杠后的数字,替换为匹配到的内容 extracted_numbers <- sub(".*/(\\d+)$", "\\1", links) cat(extracted_numbers, sep = "\n")
方法二:循环实现
如果需要在处理每条链接时添加额外逻辑,循环方式也完全可行:
links <- c( "https://vdp.cuzk.cz/vdp/ruian/stavebniobjekty/10651624", "https://vdp.cuzk.cz/vdp/ruian/stavebniobjekty/12488284124" ) # 初始化结果向量,长度与输入链接一致 extracted_numbers <- character(length(links)) # 循环处理每条链接 for (i in seq_along(links)) { extracted_numbers[i] <- sub(".*/(\\d+)$", "\\1", links[i]) } cat(extracted_numbers, sep = "\n")
批量处理说明
- 向量式操作是R的原生高效处理方式,处理10000条链接几乎瞬间完成,性能最优
- 循环方式虽然可行,但速度略逊于向量式操作,不过对于10000条数据来说,实际使用中的差距并不明显
内容的提问来源于stack exchange,提问作者walle_eva
相关产品推荐
相关产品推荐

