2017-04-19 8 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を使用しようとしましたしかし、それは期待どおりに動作していないようです。これを行うには期待

+0

のいずれかの特殊文字を読み取ります。そして/あなたのgsubを台無しにしています。 'fixed = TRUE'オプションを追加すると正規表現の文字列として解釈されなくなります。 –

+0

*正確に*あなたの希望の結果は何ですか?あなたの例は、一般化していないので、実際にはこれを明確にしません。とにかく、特別な正規表現ではなく、適切なURIパーサを使用するべきでしょう。 –

答えて

1

一つの方法として、そのdoesntの仕事は、URLの解析のためのいくつかの非常に便利な機能を持つパッケージurltoolsを使用することですが

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

。最初に、実際に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 

NOTE

あなたのURL変数が要因ではないことを確認してください。 stringsAsFactors = FALSEでデータを読み取るか、

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

それは完璧に動作します! – Googme

関連する問題