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
一个快速解决方法是用 NA
s 替换您的空白字符串。像这样的东西有效:
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
这与 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
一个快速解决方法是用 NA
s 替换您的空白字符串。像这样的东西有效:
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