2017-04-19 49 views
-1

我想转换对应唯一的用户ID一些链接:如何替换/重命名给定字符串模式的行?

df<- data.frame(

     employeeId = c(1,2,3,4,5,6), 
     linkToEmployee = c("http://intranet.homepageEmploye.com/herSalary", 
         "http://intranet.homepageEmploye.org/herSalary/Details", 
         "http://local.com/qa/for", 
         "here the homepage is missing", 
         "http://local.org/", 
         "here the homepage is missing")) 


     employeeId      linkToEmployee 

    1   1   http://intranet.homepageEmploye.com/herSalary 
    2   2 http://intranet.homepageEmploye.org/herSalary/Details 
    3   3        http://local.com/qa/for 
    4   4       here the homepage is missing 
    5   5          http://local.org/ 
    6   6       here the homepage is missing 

现在我想这些链接转换为表格:

desired<- data.frame(

     employeeId = c(1,2,3,4,5,6), 
     linkToEmployee = c("intranet.com", 
          "intranet.org", 
          "local.com", 
          "here", 
          "local.org", 
          "here")) 


      employeeId linkToEmployee 

     1   1 intranet.com 
     2   2 intranet.org 
     3   3  local.com 
     4   4   here 
     5   5  local.org 
     6   6   here 

我曾尝试使用gsub内联网的情况下,但这似乎并没有按预期工作。

df$linkToEmployee <- gsub("http://intranet.homepageEmploye.com/", "intranet.com.", df$linkToEmployee) 

然而,这并不按预期方式工作要做到这一点

+0

特殊字符:。和/会搞乱你的gsub。它应该工作,如果你添加选项'fixed = TRUE'来停止它将其解释为正则表达式字符串。 –

+0

什么*确切*是您想要的结果?你的例子并没有真正说明这一点,因为它没有概括。无论如何,您应该使用适当的URI解析器而不是临时正则表达式。 –

回答

1

的一种方法是使用对URL解析了一些非常有用的功能包urltools。首先你需要找出哪些是真正的URL。为此,我搜索了包含TLD的字符串。

library(urltools) 

ind <- !is.na(suffix_extract(domain(df$linkToEmployee))$suffix) 

df$linkToEmployee[ind] <- sapply(strsplit(domain(df$linkToEmployee[ind]), '\\.|\\s+'), 
             function(i) paste(head(i, 1), tail(i, 1), sep = '.')) 

df$linkToEmployee[!ind] <- gsub('\\s+.*', '', df$linkToEmployee[!ind]) 

df 
# employeeId linkToEmployee 
#1   1 intranet.com 
#2   2 intranet.org 
#3   3  local.com 
#4   4   here 
#5   5  local.org 
#6   6   here 

注意

确保您的网址变量不是因素。要么用stringsAsFactors = FALSE读取数据,要么用

df$linkToEmployee <- as.character(df$linkToEmployee) 
+1

thx,完美的作品! – Googme

相关问题