2011-07-06 7 views
3

SQL에서 빌려 오기 위해 null이 아닌 값을 기반으로 데이터 프레임의 하위 집합을 가져 오려고합니다. 같은 시도 :부분 집합()에 정의 된 값 확인

lately <- subset(data, year > 1997 & myvalue != NA) 

하지만 그건 맞지 않아. 팁이나 rsters?

+0

데이터? "옳지 않은"정의? 우리는 마음을 읽는 독자가 아닙니다. –

답변

7
subset(data, year > 1997 & !is.na(myvalue)) 

해야합니다. 사용중인 버전이 작동하지 않는 이유는 NA 데이터가 무엇인지 모르기 때문에 foo != NA 또는 foo == NA은 항상 NA입니다. is.na()을 사용하여 NA을 테스트하고 "NOT NA"를 원하면 !을 사용하여이를 무효화하십시오.

예컨대 :

> dat <- data.frame(year = 1995:2000, myvalue = c(1,3,4,NA,6,10)) 
> dat 
    year myvalue 
1 1995  1 
2 1996  3 
3 1997  4 
4 1998  NA 
5 1999  6 
6 2000  10 
> subset(dat, year > 1997 & myvalue != NA) 
[1] year myvalue 
<0 rows> (or 0-length row.names) 
> subset(dat, year > 1997 & !is.na(myvalue)) 
    year myvalue 
5 1999  6 
6 2000  10 

그것은 버전이 작동하지 않는 이유에 대해 더 숙고 할 교훈이다. 절 반환의

첫 번째 부분 :

> with(dat, year > 1997) 
[1] FALSE FALSE FALSE TRUE TRUE TRUE 
우리는 그들이 거짓으로 어떤 추가 검사를 수행 할 필요가 없습니다 처음 3 개 요소에 대한

,하지만 우리는 최종의 두 번째 절을 확인해야 예제의 세 요소

> with(dat, year > 1997 & myvalue != NA) 
[1] FALSE FALSE FALSE NA NA NA 

행을 선택하지 끝낼 것이다, 따라서 제로 행 객체 반환

> with(dat, myvalue != NA) 
[1] NA NA NA NA NA NA 

따라서 조합 절은 반환 전술 한 바와 같이, 두번째 절은 모든 요소 NA 반환 예를 들어.

+0

사려 깊은 반응에 감사드립니다. – Wells