2

複数のマネージャーの毎日のパーセンテージ リターンを含む data.frame があります。data.frame を並べ替えて、たとえば最高の 5 人のパフォーマーと最低の 5 人のパフォーマーを表示したいと考えています。

sort(x)関数を見つけましたrev(sort(x))が、行名を保持していないため、マネージャーの名前を確認するために必要です。

任意のヒント?

4

3 に答える 3

3

私は同じ問題を抱えていましたが、SOで見たQ&Aはどれも単一列のデータフレームを扱っていません. 列が1つしかない場合、@eddiの答えは機能しません。

df.2col <- data.frame(a = c(4:1), b = c(1:4), row.names = paste0('blah', c(1:4)))

print(df.2col[order(df$a),])

素敵なソートされたデータフレームが得られます:

      a b
blah4 1 4
blah3 2 3
blah2 3 2
blah1 4 1

しかし、単一の列では、

df.1col <- data.frame(a = c(4:1), row.names = paste0('blah', c(1:4)))

print(df.1col[order(df$a),])

行名は破棄されます:

[1] 1 2 3 4

私が頼らなければならなかった厄介な解決策は、データと行の両方をソートすることでした:

df.sorted<-data.frame(a=df.1col$a[order(df.1col$a)],row.names=row.names(df.1col)[order(df.1col$a)])

print(df.sorted)

望ましい結果:

      a
blah4 1
blah3 2
blah2 3
blah1 4

これを行うためのより良い方法があれば、ご指導いただければ幸いです

于 2015-12-11T20:11:05.020 に答える
2

あなたがしたいorder

df = data.frame(a = c(4:1), b = c(1:4), row.names = paste0('blah', c(1:4)))
df
#      a b
#blah1 4 1
#blah2 3 2
#blah3 2 3
#blah4 1 4

df[order(df$a),]
#      a b
#blah4 1 4
#blah3 2 3
#blah2 3 2
#blah1 4 1
于 2013-05-22T15:03:14.807 に答える