2013-03-02 5 views
1

데이터가 여러 행과 3 열로 설정되어 있습니다. 첫 번째 열 race0s, 1s 및 NAs로 채워집니다. 나는 어떤 NA도 무시하면서 0에 해당하는 행을 꺼내려고합니다.subselect를 사용할 때의 문제

내 코드 :

dt = data.table(cbind((data[,'race']), (data[,'age']), (data[,'sex']))) 
data = dt[complete.cases(dt), ] #remove the NAs 
subset(data,race == 0) 

나는이 오류가 계속하고 나는 그것이 무엇을 의미하는지 확실하지 않다 :

Error in `[.data.table`(x, r, vars, with = FALSE) : 
    i is invalid type (matrix). Perhaps in future a 2 column matrix could 
    return a list of elements of DT (in the spirit of A[B] in FAQ 2.14). 
    Please let datatable-help know if you'd like this, or add your 
    comments to FR #1611. 
+0

'subset'을 데이터 테이블이 아닌 데이터 프레임에 적용해야한다고 생각합니다 ... – juba

+4

@juba, 아니요,'data.table'에서도 작동합니다. 아마도 가장 빠른 방법은 아닙니다 (키 열을 사용하여 키 및 하위 집합과 비교). – Arun

+2

@LaurenMeaser는 구성된 예제에서 나에게 잘 작동하는 것 같습니다. 문제를 디버그하고 싶다면 데이터를 제공해야합니다. – Arun

답변

1

그것은 당신이 몇 단계를 절약 할 수있을 것 같습니다 (게인 같은 것을 사용하여 속도의 공정한 비트) :

setkey(dt, "race") 
    dt[!is.na(race)][.(0)] 
+0

을 사용하면 효과가 있습니까? 단순히'dt [. (0)]'의 차이점은 무엇입니까? – Arun

+0

@Arun 'race'가 키가 될 수도 있고 아닐 수도 있습니다. 단순히'dt [. (0)]'를 사용하면 키가 'NA'인 경우를 생략 할 수 있지만 반드시 'race'가 'NA'가 아닌 인스턴스는 생략합니다. –

+0

Ricardo, 어쩌면 오해 할 수 있습니다. 키. 'race'.dt [. (0)]에서 NA 항목을 제거하는 용도는 무엇입니까? 'race'는 동일한 출력을 생성해야합니다. 맞습니까? – Arun

0

이 시도 :

,
na.omit(dt)[race==0] 

na.omit 함수는 NA이 포함 된 행을 제외하고 데이터 테이블을 반환합니다.

+0

na.omit은 어떤 열이 표시되는지에 관계없이 행을 삭제합니다. 확실하지는 않지만 OP 만 삭제하려고하는 것처럼 들립니다 'race '가 NA 인 행 –

+0

그럴 경우 솔루션은 내가 상상할 수있는 것처럼 간결합니다. –

관련 문제