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

R - How to search for a string in one column in other columns of a data frame (ignoring spaces)

这与 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),告诉我列 'word' 中的字符串是否存在于 'keywords' 中。我试过了:

df$word_exists <- mapply(grepl, pattern=df$keywords, x=df$word)

但是获取所有 'TRUE',我认为这是因为它正在识别 'keywords' 中的空白并将它们与空 'words' 匹配。有什么建议么? 谢谢!

只需使用 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

一个快速解决方法是用 NAs 替换您的空白字符串。像这样的东西有效:

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