2013-01-03 4 views
1

특정 값 (여기서는 RATIO1 및 RATIO 2)이 NaN 인 모든 행을 가져 오려고합니다. R 모든 값이 NaN 인 행을 얻습니다.

나는 그것이 내가 is.na() 또는 complete.cases() <를 사용하여 만들 수있는이

ID RATIO1 RATIO2 RATIO3 
1 1 NaN NaN 0.3 
2 2 NaN NaN 0.2 

같이 할

data.frame(ID=c(1,2,4,6,7),RATIO1=c(NaN,NaN,0.2,9.5,6), 
      RATIO2=c(NaN,NaN,0.5,NaN,6), RATIO3=c(0.3,0.2,4,NaN,5)) 

ID RATIO1 RATIO2 RATIO3 
1 1 NaN NaN 0.3 
2 2 NaN NaN 0.2 
3 4 0.2 0.5  4 
4 6 9.5 NaN NaN 
5 7  6  6  5 

같은 데이터 프레임을 고려 -이 것 행을 삭제하십시오.

들으

+1

왜 4 번 행이 아니겠습니까? – joran

+0

수정보기, im sry. – hendrik

+0

수 있습니다 : 비율은 sepcific 원산지에서 나는 원천 특정 "행"예를 들어 ratio3 -> ratio2 및 비율 1 NaN해야합니다 (예 : 샘플에서 찾을 수 없습니다) – hendrik

답변

4

임의의 문자 값을 다음과 같이 시도하십시오.

dat <- data.frame(ID=c(1,2,4,6,7),RATIO1=c(NaN,NaN,0.2,9.5,6), RATIO2=c(NaN,NaN,0.5,NaN,6), RATIO3=c(0.3,0.2,4,NaN,5)) 
> dat[is.nan(dat$RATIO1) & is.nan(dat$RATIO2),] 
    ID RATIO1 RATIO2 RATIO3 
1 1 NaN NaN 0.3 
2 2 NaN NaN 0.2 

is.finite이 일을 자주하는 경우에도 유용 할 수 있습니다.

5

여기에 하나의 가능성은 한 번에 하나의 행을 검사하고 완전히 NaN들로 구성되어 있는지 여부를 확인하기 위해 apply()를 사용 : 당신이 정말 NaN하지 다루고있는 가정

df[apply(df[2:3], 1, function(X) all(is.nan(X))),] 
# ID RATIO1 RATIO2 RATIO3 
# 1 1 NaN NaN 0.3 
# 2 2 NaN NaN 0.2 
+0

특정 열에 만 묶이지 않는 솔루션을 원한다. – Serenthia

0

이를 사용할 수 있습니다 : 조쉬 오브라이언에서이 기반으로

df <- data.frame(ID=c(1,2,4,6,7),RATIO1=c(NaN,NaN,0.2,9.5,6), 
        RATIO2=c(NaN,NaN,0.5,NaN,6), RATIO3=c(0.3,0.2,4,NaN,5)) 

df[is.nan(df$RATIO1) & is.nan(df$RATIO2),] 

    ID RATIO1 RATIO2 RATIO3 
1 1 NaN NaN 0.3 
2 2 NaN NaN 0.2 
+0

하지만 2 열과 3 열에는 'NA'(NaN 만 포함)가 아닌 행이 유지됩니다 ... –

+0

맞습니다! 나는 그뿐만 아니라 data.frame을 부분적으로 잘못 놓쳤습니다 ... 나는 아래의 joran의 대답과 다를 바없는 대답을 업데이트했습니다. – sinclairjesse

1

향상된 솔루션을.

df[rowSums(is.nan(as.matrix(df[2:3])))>1,] 
# 
# as.matrix because is.nan requires matrix (but is.na doesn't) 
# rowSums for speed gain 
# 
관련 문제