2016-10-27 10 views
2

これはthis questionと非常によく似ていますが、レイヤーが追加されています。ある列の文字列が別の列に存在するかどうかを調べたいと思います。しかし、いくつかの行では列が空であるため、以下のコードを実行すると、空白にマッチするだけで「TRUE」がたくさん得られます。スペースを無視して文字にマッチさせるにはどうすればいいですか?私が欲しいものR - データフレームの他の列の1列の文字列を検索する方法(空白を無視する)

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 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 
関連する問題