2017-03-31 1 views
-1

テキストのデータフレームを小文字に変換したいが、すべてのCAPS文字を含む単語を変換したくない。例えばすべての文字を大文字から小文字に変換するR

のような文字列は、「私の友人ENRIQUEが研究に良くない」している場合

これの出力は

「私の友人ENRIQUEが研究に良くない」

ようにする必要がありますすべて大文字の単語を除いて、すべてを小文字に変換しました。 この作業を行うにはr関数が必要です。

答えて

3

gsubと(perl互換の)正規表現でこれを行うことができます。

gsub("(\\b\\w*[a-z]\\w*\\b)", "\\L\\1", String, perl=TRUE) 
"my friend ENRIQUE is not good in studies" 

\\bワード境界を置くと、これは別個の単語で動作することが保証されます。 [a-z]は、少なくとも1つの小文字を含む単語を選択します。 [a-z]の前後の\\w*は、「ワード文字」すなわち文字または数字の任意の数(ゼロを含む)に一致します。置換パターンの\\Lは小文字に変換されます。

+0

ありがとうございました。ここで\\ wの使用は何ですか? – umair

+0

答えに少し追加しました。 – G5W

+0

gsubで偉大な答え – akrun

0

文字列を別々の単語に分割して、小文字のアルファベットの[a-z]を含む単語を見つけ、その単語を小文字に変換することができます。私たちは、空のcollapse引数でpaste0使用できる1つの文字列としてそれを作るために

word_vec <- strsplit(x, " ")[[1]] 
ifelse(grepl('[a-z]', word_vec), tolower(word_vec), word_vec) 

#[1] "my" "friend" "ENRIQUE" "is" "not" "good" "in" "studies" 

paste0(ifelse(grepl('[a-z]', word_vec), tolower(word_vec), word_vec), collapse = " ") 

#[1] "my friend ENRIQUE is not good in studies" 
+1

答えをありがとう。この機能をコーパスに適用してフィルタリングしたいと考えています。このために "tm"パッケージに直接関数がある場合。私にお知らせください。 – umair

関連する問題