2012-01-25 7 views
3

単純な「良い方法がありますか?」という質問があります。 data.frame内の任意のセルが、私が探している部分文字列が含まれている場合、私は知りたい:データフレーム内の任意のセルのgrep

d=data.frame(V1=c("xxx","yyy","zzz"), V2=c(NA,"ewruinwe",NA)) 
grepl("ruin",d[2,2]) #TRUE 
grepl("ruin",d) #FALSE FALSE 
any(grepl("ruin",as.character(as.matrix(d)))) #TRUE 

最後の行は、私が欲しいものを行いますが、それは私が「場合、私は思ったんだけどとても醜いです何かが簡単に欠けている。

背景:dは、t=readHTMLTable(url)(XMLパッケージ)の要素の1つです。私はエラーメッセージをチェックするためにd [2,2]アプローチをしていましたが、ウェブサイトがHTMLテーブルに別の行を追加して、私が探していたエラーメッセージを別のセルにプッシュすることを発見しました。

UPDATE:これについて

any(grepl("ruin",as.matrix(d))) 
any(apply(d, 2, function(x) grepl("ruin", x))) 
+2

これはRがすでにそうしているので、as.matrixにキャストした後に 'as.character'を実行する必要はありません。すなわち、 '任意の(grepl( 'ruin'、as.matrix(d)、ignore.case = T))'となります。私はあなたが得るほど滑らかだと思う。 'apply(d、1、function(x)grepl(" ruin "、x、ignore.case = T)))' –

答えて

7

何?:そう、二つの選択肢(mathematical.coffeeとローマLuštrikのおかげで)しているようですか

d=data.frame(V1=c("xxx","yyy","zzz"), V2=c(NA,"ewruinwe",NA)) 
apply(d, c(1,2), function(x) grepl("ruin", x)) 
     V1 V2 
[1,] FALSE FALSE 
[2,] FALSE TRUE 
[3,] FALSE FALSE 

「2」は「c(1,2)」と同じです。

+2

apply(d、2)を適用すると、 、function(x)grepl( 'ruin'、x))も機能します。 – Justin

関連する問題