R - 如何在数据框的其他列中的一列中搜索字符串(忽略空格)

时间:2016-10-27 17:26:11

标签: r grepl

这与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;有什么建议? 谢谢!

2 个答案:

答案 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