2017-04-02 21 views
1

私は、Rに1つの列に住所を含む韓国語のデータフレームを持っています。私は単語(動詞で終わる単語)を抽出する必要があります(存在していない可能性があります)。この単語を含む "dong"という名前の新しい列を作成します。したがって、私のデータは列 "住所"に表示され、希望の出力は下の列 "洞"に表示されます。文字列から動詞で終わる単語(可変長の単語)をRで抽出する

address <- c("대전광역시 서구 탄방동 홈플러스","대전광역시 동구 효동 주민센터","대전광역시 대덕구 오정동 한남마트","대전광역시 동구 자양동 87-3번지 성동경로당","대전광역시 유성구 용계로 128") 
dong <- c("탄방동","효동","오정동","자양동",NA) 
data <- data.frame(address,dong, stringsAsFactors = FALSE) 

私はgrepを使用しようとしましたが、私に必要なものが正確に与えられていません。 grepのではなく、文字列全体を返し、なぜ1)私は、私は必要な単語を識別するために、適切な正規表現を記述するかどうかはわかりませんし、2)私はわからない:

grep(".+동\\s",data$address,value=T) 

は、私は2つの問題があると思います言葉。私は何か提案を感謝します。

+0

追加ライブラリは必要ありません。[このデモ](http://ideone.com/Wff1NS)を参照してください。また、単語全体を空白ではなく単語の境界に合わせます。 –

答えて

1

grepは文字列全体を返します。あなたの場合はstringrライブラリが便利です。

library(stringr) 
str_match(paste0(data$address, ' '), '([^\\s]+동)\\s') 
    [,1]  [,2]  
[1,] "탄방동 " "탄방동" 
[2,] "효동 " "효동" 
[3,] "오정동 " "오정동" 
[4,] "자양동 " "자양동" 
[5,] NA  NA  

2番目の列は必要なものです。文字列の最後に "dong"が現れると、正規表現が一致するように文字列の最後にスペースを追加したことに注意してください。

+0

ありがとう、それは素晴らしいです!私はあなたの助けに感謝します。 – mayerkat

1

特定の文字で終わる韓国語単語全体を抽出する正規表現は

\b\w*동\b 

regex demoを参照してくださいです。

詳細

  • \b - 大手ワード境界
  • \w* - 0+ワード文字
  • - エンディング手紙
  • \b - 末尾の単語境界

参照してください。 R demo

address <- c("대전광역시 서구 탄방동 홈플러스","대전광역시 동구 효동 주민센터","대전광역시 대덕구 오정동 한남마트","대전광역시 동구 자양동 87-3번지 성동경로당","대전광역시 유성구 용계로 128") 
## matches <- regmatches(address, gregexpr("\\b\\w*동\\b", address, perl=TRUE)) 
matches <- regmatches(address, gregexpr("\\b\\w*동\\b", address)) 
dong <- unlist(lapply(matches, function(x) if (length(x) == 0) NA else x)) 
data <- data.frame(address,dong, stringsAsFactors = FALSE) 

出力:dong <- unlist(lapply(matches, function(x) if (length(x) == 0) NA else x))行は一致が見つからなかったそれらの行にNAを追加する必要があることを

         address dong 
1   대전광역시 서구 탄방동 홈플러스 탄방동 
2    대전광역시 동구 효동 주민센터 효동 
3   대전광역시 대덕구 오정동 한남마트 오정동 
4 대전광역시 동구 자양동 87-3번지 성동경로당 자양동 
5    대전광역시 유성구 용계로 128 <NA> 

注意。

+0

ありがとうございます!これも素晴らしいです。私はあなたの詳細な説明に本当に感謝します。 – mayerkat

+0

@mayerkat:あなたに最適な答えを受け入れることを検討してください。 –

関連する問題