2016-10-27 10 views
2

Это очень похоже на this question, но с добавленным слоем. Я хочу посмотреть, существует ли строка в одном столбце в другом столбце. Но поскольку для некоторых строк столбец пуст, когда я запускаю код ниже, я получаю много «TRUE», потому что они просто соответствуют пробелам. Как я могу игнорировать пробелы и просто сопоставлять символы?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) 

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

ответ

3

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

 Смежные вопросы

  • Нет связанных вопросов^_^