如何从URL中提取最后一个ID?R语言批量处理异常求助
解决R脚本提取URL末尾ID重复的问题
问题原因
你的代码里temp[[1]][length(temp[[1]])]是直接取temp列的第一个列表元素的最后一项,所以所有行都会复用第一行的分割结果,导致ID全部重复。
解决方案1:修正原分割逻辑
利用purrr包的map_chr函数,逐行处理str_split返回的列表列,提取每行的最后一项:
library(stringr) library(dplyr) library(purrr) df = read.csv('~/Downloads/urls.csv') df = df %>% mutate(temp = str_split(url, pattern = '-')) %>% # 遍历每个列表,取最后一个元素并转为字符向量 mutate(id = map_chr(temp, ~ last(.x))) %>% select(-temp) # 可选:删除临时的temp列
解决方案2:更简洁的正则提取法
既然你已经用basename拿到了最后一个斜杠后的文本,直接用正则表达式提取末尾的数字更高效,不需要分割字符串:
library(stringr) library(dplyr) df = read.csv('~/Downloads/urls.csv') df = df %>% mutate(basename_text = basename(url)) %>% # 提取字符串末尾的所有数字 mutate(id = str_extract(basename_text, "\\d+$")) %>% select(-basename_text) # 可选:删除临时列
正则\\d+$的含义是:匹配字符串末尾($)的一个或多个数字(\\d+)。
内容的提问来源于stack exchange,提问作者Firda el.
相关产品推荐
相关产品推荐

