文本替换 - 模式是字符串的集合列表[r]

时间:2015-10-23 23:01:02

标签: r apply code-cleanup stringr text-manipulation

我在大型数据集中有一个字符串变量,我希望根据设置的字符串列表进行清理。恩。 pattern< - c(“dog”,“cat”)但我的列表大约有400个元素。

vector_to_clean == a

black Dog
white dOG
doggie
black CAT
thatdamcat

然后我想应用一个函数来产生

dog
dog
dog
cat
cat

我已经尝试过str_extract,grep,grepl等。因为我可以一次根据一个字符串选择一个模式。我想我想要的是使用其中一个文本清理功能。不幸的是,我被困住了。以下是我最近的尝试。谢谢你的帮助!

new <- vector()

lapply(pattern, function(x){
  where<- grep(x,a,value = FALSE, ignore.case = TRUE)
  new[where]<-x
  })

2 个答案:

答案 0 :(得分:5)

我们paste'模式'向量一起创建一个单独的字符串,用它来从'vec1'中提取单词后我们将它改为小写字母(tolower(vec1))。

library(stringr)
str_extract(tolower(vec1), paste(pattern, collapse='|'))
#[1] "dog" "dog" "dog" "cat" "cat"

数据

pattern <- c("dog","cat") 
vec1 <- c('black Dog', 'white dOG', 'doggie','black CAT', 'thatdamcat')

答案 1 :(得分:4)

使用基础R的另一种方法是:

#data
vec <- c('black Dog', 'white dOG', 'doggie','black CAT','thatdamcat')

#regexpr finds the locations of cat and dog ignoring the cases
a <- regexpr( 'dog|cat', vec, ignore.case=TRUE )

#regmatches returns the above locations from vec (here we use tolower in order 
#to convert to lowercase)
regmatches(tolower(vec), a)
[1] "dog" "dog" "dog" "cat" "cat"