2017-04-05 8 views
4

特定の値がデータフレーム内のどこにあるかをチェックしようとしています。値がデータフレーム内にあるかどうかをチェック

私は%in%オペレータが、私はこれを行うことができるようにすべきである知っているが、全体のデータフレームに適用したときに、私が期待するように動作するようには思えない。

A = data.frame(B=c(1,2,3,4), C=c(5,6,7,8)) 
1 %in% A 

[1] FALSE 

しかし、私はこれを適用した場合値は、私が期待するように動作し、その中にある特定の列:

1 %in% A$C 

[1] TRUE 

値がデータフレームのどこにあるかどうかをチェックする適切な方法は何ですか?

+4

'1%%のように。行列(A) '? Aのすべての列が数字である場合はどちらが当てはまるのでしょうか? – digEmAll

+0

@digEmAll、%1の%as.character(as.matrix(A)) 'はすべてのケースで機能するかもしれませんが、それがどれほど優れているかを知っている。 –

答えて

6

あなたは行うことができます:

any(A==1) 
#[1] TRUE 

OR Reduceで:

Reduce("|", A==1) 

OR

同じ長さのベクトルのすなわちリスト -
length(which(A==1))>0 

OR

is.element(1,unlist(A)) 
+0

これらはすべて動作しますが、最初のコードではコードが何をするのかが明確になります。 – dash2

4

sapplyの変数をループし、anyを使用します。

any(sapply(A, function(x) 1 %in% x)) 
[1] TRUE 

またはdigEmAllさんのコメント以下は、リスト(data.frame)を受け取り、ベクトルを返しますunlistを、使用することができます。

1 %in% unlist(A) 
[1] TRUE 
7

それとも単に

sum(A == 1) > 0 
#[1] TRUE 
+1

より明瞭に 'any(A == 1)' – dash2

+1

@ dash2これはすでに以下に掲載されています.... – Sotos

2

あなたの最初の試みがうまくいかない理由を理解するためのトリックは、実際にデータフレームが何であるかを理解することにダウンしています。ここで何をしようとしているのかは、そのベクトルのリストがあなたの条件と一致するかどうかをチェックするのではなく、それらのベクトルの値が条件に一致するかどうかをチェックすることです。

3

あなたがf.exを行うことができ、その値の場所を検索するには:

which(A == 1, arr.ind=TRUE) 
#  row col 
#[1,] 1 1 
0

てみてください:FALSEまたはTRUE

any(A == 1)

戻り

関連する問題