2012-01-30 18 views
1

カラムstat0に続く(sds45)データフレームをソートする際に問題があります。何もしなかった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

ありがとうリッチー。私はあなたの役に立つ説明に感謝します。 – bob123

+0

解決策は、根本的な問題を修正することです。 – hadley

+0

@hadley:合意。私はその点を明確にするために言語を修正しました。 –