r - 每个域仅保留一行

标签 r

我有一个网址列表,如下所示: 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/

相关文章:

R dplyr - 动态排列行顺序

r - 快速连接data.table(潜在bug,上报前检查)

r - 循环遍历 2 个数据框以识别公共(public)列

替换此列表中的 for 循环

r - 来自 2D 矩阵的 3D 曲面图

r - 对 data.frame 中的值进行分类

r - 合并两个图并在 R igraph 中添加边权重

r - 将 "1984-03-25 02:00:00"转换为 POSIX 给出 NA

javascript - 从 selectizeInput 获取不完整的输入

regex - 子集不是基于完全匹​​配,而是基于 R 中的部分