2013-09-26 50 views
5

Tôi đang tìm một chức năng có thể trích xuất tên miền từ URL trong R. Bất kỳ chức năng nào tương tự như tldextract trong R? EDIT: Hiện nay tôi đang sử dụng phương pháp dưới đây:Chức năng trích xuất tên miền từ URL trong R

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

Nhưng tôi đang tìm kiếm một chức năng được xác định trước đó có thể tiết kiệm công sức viết mã.

+0

Thêm ví dụ, hiển thị những gì bạn đã cố gắng cho đến bây giờ. –

+0

-1 Cho đến khi dữ liệu mẫu được cung cấp và những gì bạn đã thử! –

+0

mã tôi đang sử dụng hiện đang được thêm –

Trả lời

2

Tôi không biết chức năng nào trong gói để thực hiện việc này. Tôi không nghĩ rằng có bất cứ điều gì trong cài đặt cơ bản của R. Sử dụng một chức năng người dùng định nghĩa và lưu trữ nó một số nơi để source sau đó hoặc làm cho gói của riêng bạn với nó.

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

Đây chính xác là tôi đang tìm kiếm. Một hàm có thể xử lý bất kỳ loại URL nào có thể. –

9

Bạn cũng có thể sử dụng urltools gói tương đối mới:

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 

Nó được hỗ trợ bởi Rcpp vì vậy nó xấu xa nhanh (nhiều hơn đáng kể hơn so với sử dụng cài sẵn trong điện R apply chức năng

0

tôi. chỉ cần viết regex này có thể được áp dụng cho các email và các trang web để trích xuất và kết hợp trên tên miền Regex có thể được sửa đổi để trích xuất các bộ phận khác nhau, và nó là vectorized.Tôi làm một số chế biến bổ sung đó là hoàn toàn 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) 
 
}

Các vấn đề liên quan