order
関数を使用してテーブルの列を並べ替えようとしていますが、
a<-c("-2","-7","-4")
b<-c("9","-1","3")
z<-data.frame(a,b)
Zを列aで最大から最小に並べ替えたいとき、うまくいきません。この関数は、負の値をその絶対値で並べ替えます。
z[order(z$a,decreasing=TRUE),]
order
関数を使用してテーブルの列を並べ替えようとしていますが、
a<-c("-2","-7","-4")
b<-c("9","-1","3")
z<-data.frame(a,b)
Zを列aで最大から最小に並べ替えたいとき、うまくいきません。この関数は、負の値をその絶対値で並べ替えます。
z[order(z$a,decreasing=TRUE),]
因子を数値に変換する必要がある場合は、FAQ で説明されているように、まず文字 tna に変換してから数値に変換する必要があります。
str(z)
#'data.frame': 3 obs. of 2 variables:
# $ a: Factor w/ 3 levels "-2","-4","-7": 1 3 2
# $ b: Factor w/ 3 levels "-1","3","9": 3 1 2
z[order( as.numeric(as.character(z$a)), decreasing=TRUE ), ]
a b
1 -2 9
3 -4 3
2 -7 -1
(説明: 因数は、もちろん「順序付き因数」でない限り、順序付けされず、">" または "<" との比較は NA を返します。
> z$a[1] > z$a[2]
[1] NA
Warning message:
In Ops.factor(z$a[1], z$a[2]) : > not meaningful for factors
あなたの努力で注文されているのは、あなたが期待していた数値への内部強制でした。)
> z$a
[1] -2 -7 -4
Levels: -2 -4 -7
> as.numeric(z$a)
[1] 1 3 2
以下は単純なベクトルです。
x <- c(2, 4, 0.5, -0.5 ,-1, 3,10)
print(x)
2.0 4.0 0.5 -0.5 -1.0 3.0 10.0
> order(x)
5 4 3 1 6 2 7 # Not cool
> match(x, sort(x))
4 6 3 2 1 5 7 # Cool