文本替换——模式是一组字符串[r]

Text Replacement -- Pattern is a set list of strings [r]

我在大型数据集中有一个字符串变量,我想根据一组字符串列表对其进行清理。前任。 pattern <- c("dog","cat") 但是我的列表大约有 400 个元素。

vector_to_clean ==一个

black Dog
white dOG
doggie
black CAT
thatdamcat

然后我想应用一个函数来yield

dog
dog
dog
cat
cat

我尝试了 str_extract、grep、grepl 等。因为我一次可以根据一个字符串选择一种模式。我想我想要的是将 dapply 与这些文本清理功能之一一起使用。不幸的是,我被困住了。下面是我最近的尝试。感谢您的帮助!

new <- vector()

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

我们 paste 'pattern' 向量一起创建一个字符串,在我们将其更改为小写后使用它从 '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')

另一种使用基数 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"