2013-09-26 33 views
5

我正在尋找一種可以從R中的URL中提取域名的函數。 任何類似於R中tldextract的函數? 編輯: 我目前使用下面的方法:從R中提取域名的功能R

domain=substr(as.character("www.google.com"), 
    which(strsplit("www.google.com",'')[[1]]=='.')[1]+1, nchar("www.google.com")) 

但是我正在尋找一個預先定義的功能,可節省編​​碼工作。

+0

添加的例子,表明你已嘗試到現在什麼。 –

+0

-1直到提供了示例數據,以及您嘗試過的內容! –

+0

我使用的代碼目前已添加 –

回答

2

我不知道一個包中的函數來做到這一點。我不認爲R的基本安裝中有任何東西。使用用戶定義的函數並將它存儲在source以後的地方,或者使用它自己製作包。

x1 <- "http://stackoverflow.com/questions/19020749/function-to-extract-domain-name-from-url-in-r" 
x2 <- "http://www.talkstats.com/" 
x3 <- "www.google.com" 

domain <- function(x) strsplit(gsub("http://|https://|www\\.", "", x), "/")[[c(1, 1)]] 

domain(x3) 
sapply(list(x1, x2, x3), domain) 
## [1] "stackoverflow.com" "talkstats.com"  "google.com" 
+0

這正是我一直在尋找的。一個可以處理任何可能類型的URL的函數。 –

9

您也可以使用相對較新的urltools包:

library(urltools) 

URLs <- c("http://stackoverflow.com/questions/19020749/function-to-extract-domain-name-from-url-in-r", 
      "http://www.talkstats.com/", "www.google.com") 

suffix_extract(domain(URLs)) 

##    host subdomain  domain suffix 
## 1 stackoverflow.com  <NA> stackoverflow com 
## 2 www.talkstats.com  www  talkstats com 
## 3 www.google.com  www  google com 

它是由Rcpp支持所以它是邪惡的快(顯著如此比使用內置R中apply功能

0

我。只是寫了這個正則表達式,可以應用到電子郵件和網站上提取和匹配域。正則表達式可以修改提取不同的部分,它是矢量化的,我做了一些額外的處理,完全o ptional。

invalid_domains = "yahoo.com|aol.com|gmail.com|hotmail.com|comcast.net|me.com|att.net|verizon.net|live.com|sbcglobal.net|msn.com|outlook.com|ibm.com" 
 
domain <- function(x){ 
 
    to_return <- tolower(as.character(x)) 
 
    to_return <- gsub('.*[[email protected]/]+([^[email protected]:/]+[.][a-z]+)(/.*$|$)','\\1',x,ignore.case=T) # extract domain. \\1 selects just the first group. 
 
    to_return <- gsub(".ocm", ".com", to_return) # correct mispellings 
 
    # to_return <- ifelse(grepl(invalid_domains,to_return),NA,to_return) # (optional) check for invalid domains, especially when working with emails. 
 
    to_return <- ifelse(grepl('[.]',to_return),to_return,NA) # if there is no . this is an invalid domain, return NA 
 
    return(to_return) 
 
}