快速问题。我在数据集中有网址,例如
URL
https://xyz.sharepoint.com/personal/abc/Documents/xsdsd asdas /10045.JPG
https://xyz.sharepoint.com/personal/abc/Documents/xsdsd asdas /12325.PNG
我希望输出是这样的。
URL ID
https://xyz.sharepoint.com/personal/abc/Documents/xsdsd asdas /10045.JPG 10045
https://xyz.sharepoint.com/personal/abc/Documents/xsdsd asdas /12325.PNG 12325
请注意,我正在获取图片名称,在我的案例 ID 中,在 jpg 或 PNG 之前。
谢谢。
一个潜在的base
R解决方案:根据斜杠字符/
将每个字符串split()
到一个列表中,然后检索最后一个块并将其存储为ID
- 然后,再次重复这个想法,但这次根据句点拆分并保留第一个块。
test <- data.frame(
url = c("https://xyz.sharepoint.com/personal/abc/Documents/xsdsd asdas /10045.JPG",
"https://xyz.sharepoint.com/personal/abc/Documents/xsdsd asdas /12325.PNG"),
stringsAsFactors = FALSE
)
test$ID <- sapply(strsplit(test$url, split = "/", FIXED = TRUE), tail, n = 1)
test$ID <- sapply(strsplit(test$ID, split = ".", FIXED = TRUE), head, n = 1)
编辑:通过将FIXED = TRUE
添加到strsplit()
中删除了正则表达式(因为它们并未真正用于此方法(,这似乎更快:
library(microbenchmark)
microbenchmark(
strsplit(test$url, split = "/"),
strsplit(test$url, split = "/", fixed = TRUE)
)
## Unit: microseconds
## expr min lq mean median uq max neval
## strsplit(test$url, split = "/") 22.2 23.30 32.775 24.20 39.75 172.5 100
## strsplit(test$url, split = "/", fixed = TRUE) 11.4 11.95 16.975 13.05 20.90 74.8 100
对于 Python 风格的正则表达式,这应该可以
r"(.+)/([0-9]+).(PNG|JPG)"
名称在第二个匹配组中
使用PCRE:
".+([[:digit:]]+).(JPG|PNG)"