这与this question非常相似,但增加了一层。我想看看一列中的字符串是否存在于另一列中。但是因为对于某些行而言列是空的,所以当我运行下面的代码时,我会得到很多真正的' TRUE'因为他们只是匹配空格。如何忽略空格并匹配字符?
word <- c('Hello','','nyc', '')
keywords <- c('hello goodbye nyc','hello goodbye nyc', 'hello goodbye nyc', 'hello goodbye nyc')
df <- data.frame(word, keywords, stringsAsFactors=F)
我想要的是添加一个新列(word_exists),告诉我列中的字符串是否&#39;字&#39;存在于&#39;关键字&#39;。我试过了:
df$word_exists <- mapply(grepl, pattern=df$keywords, x=df$word)
但是得到所有&#39; TRUE&#39;我认为这是因为它正在识别关键词中的空格。并将它们与空白的单词相匹配&#39;有什么建议? 谢谢!
答案 0 :(得分:4)
只需使用nzchar
检查您的模式是否包含字符:
transform(df, word_exists=mapply(grepl, pattern=word, x=keywords) & nzchar(word))
# word keywords word_exists
# 1 Hello hello goodbye nyc FALSE
# 2 hello goodbye nyc FALSE
# 3 nyc hello goodbye nyc TRUE
# 4 hello goodbye nyc FALSE
答案 1 :(得分:0)
快速解决方法是用NA
替换空白字符串。这样的事情有用:
df[df$word=="","word"]<-NA
df$word_exists <- as.logical(mapply(grepl, pattern=df$word, x=df$keywords))
word keywords word_exists
1 Hello hello goodbye nyc FALSE
2 <NA> hello goodbye nyc NA
3 nyc hello goodbye nyc TRUE
4 <NA> hello goodbye nyc NA