我在大型数据集中有一个字符串变量,我希望根据设置的字符串列表进行清理。恩。 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
})
答案 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"