我有一个网址列表,如下所示: my_full_urls_list
[1] "http://www.mypage1.com"
[2] "http://www.mypage1.com/produce"
[3] "http://www.mypage1.com/contact"
[4] "http://www.mypage2.com"
[5] "http://www.mypage2.com/other"
[6] "http://www.mypage2.com/rye"
[7] "http://www.mypage3.com/contact"
[8] "http://www.mypage3.com/buy"
[9] "http://www.mypage5.com/info"
对于前面的示例,我知道域:
http://www.mypage1.com
http://www.mypage2.com
http://www.mypage3.com
http://www.mypage5.com
基于此,我想为每个域仅保留一个值。输出示例:
"http://www.mypage1.com/produce"
"http://www.mypage2.com/other"
"http://www.mypage3.com/contact"
"http://www.mypage5.com/info"
我拥有的是我想要的域列表,与 my_full_urls_list 相比,我想只保留每个域的一个 url。
dput(my_full_urls_list)
c("http://www.mypage1.com", "http://www.mypage1.com/produce",
"http://www.mypage1.com/contact", "http://www.mypage2.com",
"http://www.mypage2.com/other", "http://www.mypage2.com/rye",
"http://www.mypage3.com/contact", "http://www.mypage3.com/buy",
"http://www.mypage5.com/info")
以及之前的 dput 格式的主要 url 列表:
c("http://www.mypage2.com",
"http://www.mypage3.com",
"http://www.mypage5.com",
"http://www.mypage1.com")
最佳答案
我们使用正则表达式环视来匹配 .com
后面的一个或多个字符到字符串末尾,并将其替换为 ''
。然后,我们与“域”进行匹配,将其用作分组变量,从“网址”中获取 1 个观察值的样本。
url1 <- sub("(?<=\\.com).*$", '', urls, perl=TRUE)
tapply(urls, match(url1, domains), FUN= sample, 1)
更新
如果有.com
、.net
等,我们可以匹配\
后跟单词(\\w+
) 放在字符串末尾并替换为 ''
。其余与之前相同。
url1 <- sub('\\/\\w+$', '', urls)
tapply(urls, match(url1, domains), FUN= sample, 1)
关于r - 每个域仅保留一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33521990/