2017-05-10 12 views
1

複数の列にデータフレームを注文しようとしています。列名は変数に渡されます。変数を使用して複数の列でデータフレームを注文する

df <- data.frame(var1=c("b","a","b","a"),var2=c("l","l","k","k"),var3=c("t","w","x","t")) 

    var1 var2 var3 
1 b l t 
2 a l w 
3 b k x 
4 a k t 

私は2つの列で注文したい場合は、今すぐ変数

sortvar <- "var1" 
df[order(df[,sortvar]),] 

    var1 var2 var3 
2 a l w 
4 a k t 
1 b l t 
3 b k x 

を使用して1列に並べ替え、上記の解決策は動作しません。

sortvar <- c("var1","var2") 
df[order(df[,sortvar]),] #does not work 

列名を使用して手動で注文することができます。

df[with(df, order(var1,var2)),] 

    var1 var2 var3 
4 a k t 
2 a l w 
3 b k x 
1 b l t 

しかし、変数を使用してデータフレームを複数の列に並べるにはどうすればよいですか?私はplyrとdplyr arrange関数を認識していますが、ここで基底Rを使いたいと思います。

答えて

1

orderは、個別の引数として複数の発注変数を期待し、あなたの場合には残念ですが、直接的な解決策を示唆している:do.callを使用します。

場合
df[do.call(order, df[, sortvar]), ] 

あなたはdo.callと慣れていない:それは呼び出しを構築し、実行しますプログラム的に以下の2つのステートメントは同等です:

fun(arg1, arg2, …) 
do.call(fun, list(arg1, arg2, …)) 
+1

同様の変形: 'with(mtcars、do.call(order、mget(sortvar)))'は、 – mt1022

関連する問題