2017-03-31 60 views
-1

我想将我的数据框文本转换为小写字母,但我不想将所有大写字母转换为单词。例如,如果有一个像将句子中所有字母从大写字母转换为小写字母,除了所有大写字母都使用R

一个字符串“我的朋友恩里克没有经过研究好”

这样做的输出应该像

“我的朋友恩里克是不是在研究好”

它将所有内容都转换为小写,除了所有大写字母。 我需要一个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]选取包含至少一个小写字母的单词。 [a-z]前后的\\w*与任何数字(包括零)的“单词字符”即字母或数字相匹配。替代模式中的\\L转换为小写。

+0

谢谢。这里有什么用途? – umair

+0

添加了一点答案。 – G5W

+0

用gsub很好的回答 – akrun

0

我们可以将字符串拆分成不同的单词,然后找出那些包含任何小写字母[a-z]的单词并将该单词转换为小写。

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用空collapse论点一个字符串。

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

相关问题