2017-04-05 4 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 %로 %에서 – digEmAll

+0

@digEmAll, % 1의 % as.character (as.matrix (A))'는 모든 경우에 적용될 수 있지만, 그것이 얼마나 더 좋은지 알지 못합니다. –

답변

6

당신은 할 수 :

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

또는 Reduce로 :

Reduce("|", A==1) 

또는

동일한 길이의 벡터, 즉 목록 -
length(which(A==1))>0 

또는

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

의 첫 번째 시도가 작동하지 않는 이유를 이해하는 데 트릭은, 정말 데이터 프레임이 무엇인지 이해 내려 온다. 여기에서하려고하는 것은 그 벡터 목록이 조건과 일치하는지 확인하는 것이 아니라 벡터의 값이 조건과 일치하는지 확인하는 것입니다.

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

는 f.ex 할 수있는 값의 위치를 ​​찾을 수 있습니다. 매트릭스 (A)`? 물론 A의 모든 열이 숫자 인 경우 ...
0

시도 :

any(A == 1)

반환 FALSE 또는 TRUE

관련 문제