我有数百个TXT文件,其中包含许多内容和一些下载链接。
下载链接的模式如下:
开始于: http://
和
结尾: .nc
为了方便起见,我创建了一个示例文本文件,可以从此链接下载该文件:
https://www.dropbox.com/s/5crmleli2ppa1rm/textfile_including_https.txt?dl=1
基于Stackoverflow中的此主题,我试图从文本文件中提取所有下载链接:
Extract websites links from a text in R
这是我的代码:
download_links <- readLines(file.choose())
All_my_links <- gsub(download_links, pattern=".*(http://.*nc).*", replace="\\1")
但是它也返回所有行,而我只想提取以.nc结尾的http链接
这里是结果:
head(All_my_links )
tail(All_my_links )
> head(All_my_links )
[1] "#!/bin/bash"
[2] "##############################################################################"
[3] "version=1.3.2"
[4] "CACHE_FILE=.$(basename $0).status"
[5] "openId="
[6] "search_url='https://esgf-node.llnl.gov/esg-search/wget/?distrib=false&dataset_id=CMIP6.HighResMIP.MIROC.NICAM16-9S.highresSST-present.r1i1p1f1.day.pr.gr.v20190830|esgf-data2.diasjp.net'"
> tail(All_my_links )
[1] "MYPROXY_STATUS=$HOME/.MyProxyLogon"
[2] "COOKIE_JAR=$ESG_HOME/cookies"
[3] "MYPROXY_GETCERT=$ESG_HOME/getcert.jar"
[4] "CERT_EXPIRATION_WARNING=$((60 * 60 * 8)) #Eight hour (in seconds)"
[5] ""
[6] "WGET_TRUSTED_CERTIFICATES=$ESG_HOME/certificates"
我的代码有什么错误?
任何评论将不胜感激。
gsub()
不是用于提取的,这就是您的代码的问题。用于替换。 (请参见help("gsub")
)。为了演示的目的,我将使用以下数据:
x <- c("abc", "123", "http://site.nc")
((通常,我不会下载链接中发布的数据。大多数其他人也不会。如果要共享示例数据,最好在问题中加入dput()
的输出来实现) )。
让我们看看您的gsub()
方法会发生什么:
gsub(pattern = ".*(http://.*nc).*", replacement = "\\1", x = x)
# [1] "abc" "123" "http://site.nc"
看起来很熟悉。这里发生的是gsub()
查看x
的每个元素,并将pattern
的每个出现都替换为replacement
,在这种情况下是其本身。通过这种方法,您将始终获得完全相同的字符向量。
我建议stringr::str_extract()
:
stringr::str_extract(string = x, pattern = ".*http://.*nc.*")
# [1] NA NA "http://site.nc"
如果将其包装在na.omit()
中,它将为您提供我认为您想要的输出:
na.omit(stringr::str_extract(string = x, pattern = ".*http://.*nc.*"))
# [1] "http://site.nc"