2016-05-01 18 views
1

dplyrは、数値と英字で構成されている場合、最初の列を正しくソートしないのはなぜですか?R dplyr列の英数字による並べ替え

> library(dplyr) 
> y <- read.table("file.csv", sep = ",") 
> arrange(y, V1) 
    V1   V2   V3   V4   V5   V6 
1 1 0.97348999 0.11047091 0.95841014 0.61826620 0.43164420 
2 10 0.82178167 0.21619067 0.11993356 0.06335101 0.28703842 
3 11 0.35952632 0.27595845 0.24760335 0.63887200 0.47491472 
4 12 0.43775624 0.08852486 0.06870304 0.63670202 0.55432641 
5 13 0.83894086 0.40484966 0.96735507 0.86764578 0.02588688 
6 14 0.95258399 0.65029909 0.97183605 0.87688243 0.97729517 
7 15 0.62839615 0.52999000 0.05722874 0.40709867 0.56039580 
8 2 0.22754619 0.16812359 0.39432991 0.68562992 0.43066861 
9 3 0.33318220 0.21108688 0.60911213 0.64475379 0.98617404 
10 4 0.57208511 0.58709229 0.29435093 0.78603855 0.81185551 
11 5 0.35548490 0.15229426 0.42423263 0.72963238 0.044
12 6 0.08575802 0.33310521 0.09671737 0.90820671 0.33289880 
13 7 0.05743798 0.20439928 0.56411860 0.54859270 0.81053637 
14 8 0.99056584 0.29960046 0.20765701 0.45722997 0.51354034 
15 9 0.35839568 0.11667019 0.56498996 0.43971051 0.23968955 
16 A 0.25645249 0.07045102 0.17046681 0.75700118 0.50269449 
17 B 0.57722865 0.31544398 0.33129932 0.44173772 0.11600295 
18 C 0.94242373 0.55745376 0.01542128 0.01723924 0.11413310 
私が見てみたいと思い

V1   V2   V3   V4   V5   V6 
1 1 0.97348999 0.11047091 0.95841014 0.61826620 0.43164420 
2 2 0.22754619 0.16812359 0.39432991 0.68562992 0.43066861 
3 3 0.33318220 0.21108688 0.60911213 0.64475379 0.98617404 
4 4 0.57208511 0.58709229 0.29435093 0.78603855 0.81185551 
5 5 0.35548490 0.15229426 0.42423263 0.72963238 0.044
6 6 0.08575802 0.33310521 0.09671737 0.90820671 0.33289880 
7 7 0.05743798 0.20439928 0.56411860 0.54859270 0.81053637 
8 8 0.99056584 0.29960046 0.20765701 0.45722997 0.51354034 
9 9 0.35839568 0.11667019 0.56498996 0.43971051 0.23968955 
10 10 0.82178167 0.21619067 0.11993356 0.06335101 0.28703842 
11 11 0.35952632 0.27595845 0.24760335 0.63887200 0.47491472 
12 12 0.43775624 0.08852486 0.06870304 0.63670202 0.55432641 
13 13 0.83894086 0.40484966 0.96735507 0.86764578 0.02588688 
14 14 0.95258399 0.65029909 0.97183605 0.87688243 0.97729517 
15 15 0.62839615 0.52999000 0.05722874 0.40709867 0.56039580 
16 A 0.25645249 0.07045102 0.17046681 0.75700118 0.50269449 
17 B 0.57722865 0.31544398 0.33129932 0.44173772 0.11600295 
18 C 0.94242373 0.55745376 0.01542128 0.01723924 0.11413310 
+0

@RichardScriven @RichardScriven「dplyr」だけでなく、あらゆる種類のライブラリを含めるように編集/一般化しています。個人的には「dplyr」が好きですが、ライブラリを使用している回答はうまくいくはずです。 – warship

+0

同じ行に沿って、どのようにソートを行うことを提案しますか?数字の場合は数値でソートされ、そうでない場合はアルファベット順にソートされます。残念ながら、 'charToRaw(" 1 ") r2evans

+0

@ r2evans多分、最初に数字を並べ替えてから、次に文字を並べ替えることは可能でしょうか? – warship

答えて

5

アルファのあなたの無視は少し問題があるが、どのようにについて:

:これは、ベースで動作します

library(dplyr) 
arrange(y, as.numeric(V1)) 
# Warning in order(as.numeric(y$V1)) : NAs introduced by coercion 
# V1   V2   V3   V4   V5   V6 
# 1 1 0.97348999 0.11047091 0.95841014 0.61826620 0.43164420 
# 8 2 0.22754619 0.16812359 0.39432991 0.68562992 0.43066861 
# 9 3 0.33318220 0.21108688 0.60911213 0.64475379 0.98617404 
# 10 4 0.57208511 0.58709229 0.29435093 0.78603855 0.81185551 
# 11 5 0.35548490 0.15229426 0.42423263 0.72963238 0.044
# 12 6 0.08575802 0.33310521 0.09671737 0.90820671 0.33289880 
# 13 7 0.05743798 0.20439928 0.56411860 0.54859270 0.81053637 
# 14 8 0.99056584 0.29960046 0.20765701 0.45722997 0.51354034 
# 15 9 0.35839568 0.11667019 0.56498996 0.43971051 0.23968955 
# 2 10 0.82178167 0.21619067 0.11993356 0.06335101 0.28703842 
# 3 11 0.35952632 0.27595845 0.24760335 0.63887200 0.47491472 
# 4 12 0.43775624 0.08852486 0.06870304 0.63670202 0.55432641 
# 5 13 0.83894086 0.40484966 0.96735507 0.86764578 0.02588688 
# 6 14 0.95258399 0.65029909 0.97183605 0.87688243 0.97729517 
# 7 15 0.62839615 0.52999000 0.05722874 0.40709867 0.56039580 
# 16 A 0.25645249 0.07045102 0.17046681 0.75700118 0.50269449 
# 17 B 0.57722865 0.31544398 0.33129932 0.44173772 0.11600295 
# 18 C 0.94242373 0.55745376 0.01542128 0.01723924 0.11413310 

y[ order(as.numeric(y$V1)), ] 

エドそれは:OPが尋ねられた(deSpite! "私は本当に気にしません" ;-)どのように非数値フィールドを並べ替えるか。

最初のコマンドが機能するのは、数字以外のフィールドがすべてNAに変換され、便宜的にの数字の後にとなるためです。さて、dplyr::arrangebase::orderの両方とも、最初の列の結びつきが2番目の引数などで処理される任意の引数をとります。NA(非数値のV1要素)の間でソートするには、意味をなさないものを追加してくださいそれらのような... "them":

+0

明確にするために、すべての非 "0-9"ストリングは "NA"に変換されるので、元の順序はそのままで(おそらく他の順序付けは保証されていない)、data.frameの最後にすべてダンプされます。 – r2evans

+0

うん、それは働いて信じられないよ –

+0

ええ、私も少し驚いた。 \ * shrug \ * – r2evans

関連する問題