2012-01-30 6 views
1

다음 (sds45)의 데이터 프레임을 stat0 열로 정렬하는 데 특이한 문제가 있습니다. 아무것도하지 않았다R 다중 열 데이터 정렬

test<-sds45[order(sds45$stat0),] 

... :

>sds45 

      icntr  iexpt angle overlap Specified.Shot.Width   V6 mcsp    stat0 
DD.Sigma2  3 1R50_50 45  0     50 rectangular 1.5 3.62075986666667 
DD.Sigma5  6 1R50_35 45  15     50 rectangular 1.5 1.07005992333333 
DD.Sigma8  9 1R50_40 45  10     50 rectangular 1.5  1.36916201 
DD.Sigma11 12 1R50_30 45  20     50 rectangular 1.5 0.951408239333333 
DD.Sigma14 15 1R100_75 45  25     100 rectangular 1.5 11.6972803333333 
DD.Sigma17 18 1R100_80 45  20     100 rectangular 1.5 13.4350596666667 
DD.Sigma20 21 1R100_90 45  10     100 rectangular 1.5   16.654366 
DD.Sigma31 32 1R100_150 45  50     100 rectangular 1.5 2.19166406666667 
DD.Sigma34 35 1R100_160 45  40     100 rectangular 1.5   5.4822418 
DD.Sigma39 40 1C200_25 45  75     100 circular 1.5  0.704197414 
DD.Sigma42 43 1C200_50 45  50     100 circular 1.5 1.03405964333333 
DD.Sigma45 46 1C200_75 45  25     100 circular 1.5 7.03481966666667 
DD.Sigma48 49 1C200_80 45  20     100 circular 1.5 9.19375816666667 

내 첫 번째 방법이 있었다.

test=orderBy(~stat0, data=sds45) 

나는 기본 개념에 문제가 있어야합니다

나는이 시도. 나는 이것에 대한 약간의 교육에 감사 할 것입니다.

+0

은 stat0 열 숫자입니까? 캐릭터 벡터를 정렬하면 재미있는 일이 일어납니다! 'order '로 첫 번째 시도는 숫자를 주문하는 경우 훌륭하게 작동합니다. – Justin

+2

필자의 열의 일부는 문자/숫자가 아닌 요소입니다. 어떤 경우에는 레벨이 아닌 기본 코드별로 정렬됩니다. 확인하려면'str (sds45)'를 사용하십시오. –

+0

첫 번째 접근 방식은 저의 측면에서 효과가 있습니다. 'stat0'은 숫자 열입니까? 'str (sds45 $ stat0)'이 당신에게주는 것은 무엇입니까? –

답변

3

데이터 프레임을 만들 때 stat0에 숫자가 아닌 문자가있을 수 있으므로 해당 열이 요인으로 변환되었습니다. 요소를 정렬 할 때 하위 수준 코드별로 정렬합니다.이 수준 코드는 해당 값이 표시된 순서대로 지정되므로 순서가 변경되지 않습니다.

해결책은 해당 열을 숫자로 변환하는 것입니다.

당신이되고 그것을 의도 한대로 사용, 그 요인은 숫자로 변환 할 수 있습니다

:

factor_to_numeric <- function(f) 
{ 
    as.numeric(levels(f))[as.integer(f)] 
} 

sds45$stat0 <- factor_to_numeric(sds45$stat0) 

또한 좋은 생각 입니다시도하고 찾기 위해 데이터 집합을 확인을 매우 중요 그 숫자가 아닌 문자. 해당 열에 더티 데이터가 포함되어 있으면 나머지 데이터 집합도 정리해야 할 수 있습니다.

+0

감사합니다. Richie . 당신의 도움이되는 설명에 감사드립니다. – bob123

+0

해결 방법은 근본적인 문제를 해결하는 것입니다. 열을 숫자로 강요하여 고칠 필요가 없습니다. – hadley

+0

@hadley : 동의 함. 요점을 명확히하기 위해 언어를 수정했습니다. –