R - Как искать строку в одном столбце в других столбцах фрейма данных (игнорируя пробелы)

Это очень похоже на этот вопрос, но с дополнительным слоем. Я смотрю, существует ли строка в одном столбце в другом столбце. Но поскольку для некоторых строк столбец пуст, когда я запускаю приведенный ниже код, я получаю много «ИСТИН», потому что они просто соответствуют пробелам. Как я могу игнорировать пробелы и просто сопоставлять символы?

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), который сообщает мне, существуют ли строки в столбце «слово» среди «ключевых слов». Я попытался:

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

Но получите все «ИСТИНА», и я думаю, что это потому, что он распознает пустые места в «ключевых словах» и сопоставляет их с пустыми «словами». Какие-либо предложения? Спасибо!


person Agustín Indaco    schedule 27.10.2016    source источник


Ответы (2)


Просто используйте 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
person BrodieG    schedule 27.10.2016

Быстрым решением будет замена пустых строк на 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
person Mike H.    schedule 27.10.2016