2016-04-20 10 views
0

にmutliple言葉が含まれている場合、私は、次のデータフレームを持って見つける:文字列をr

dat <- data.frame(Name = c("John", "Company A pty Ltd", ""), Surname = c("Smith", "", "Company B"), Company = c("Company D", "A Ltd", "Company B")) 

私は会社の列がfirstNameのか姓のいずれかである任意の単語が含まれているかどうかを確認します。

dat$clinicOnly <- mapply(grepl, pattern=dat$firstName, dat$Company) 

しかし、それはチェックしている文字列全体が存在している:

私は、次のコードを使用しています。したがって、最初の行では動作しますが、2番目の行が見つからないため、空のfirstNameエントリが検出されたため、最後の行が正しいものになります。

FALSE、TRUE、TRUEを生成する関数を書くにはどうすればよいですか?

+1

長い答えのための時間を持っていますが、しようとしないでください: '適用(DAT、1、機能(X){grepl(ペースト(x [1:2]、collapse = "|")、x [3])}) ' –

+0

非常にうまく動作します、ありがとう! – schow

答えて

1

どのようにこのことについて、ハードな作業を行うためにintersectを使用して?:

v1 <- strsplit(do.call(paste, dat[1:2]), "\\s+") 
v2 <- strsplit(as.character(dat$Company), "\\s+") 

mapply(function(x,y) length(intersect(x,y)) > 1, v1, v2) 
#[1] FALSE TRUE TRUE 
+0

さらに多くのコード行で質問に答えます。 – schow