28

Rの文字変数のアルファベット順にデータフレームを並べ替えたいのですが、order()関数で試してみましたが、データフレームがリストに変換されます。誰かが手がかりを持っていますか?

4

6 に答える 6

61

さて、私はここで問題はありません:

df <- data.frame(v=1:5, x=sample(LETTERS[1:5],5))
df

#   v x
# 1 1 D
# 2 2 A
# 3 3 B
# 4 4 C
# 5 5 E

df <- df[order(df$x),]
df

#   v x
# 2 2 A
# 3 3 B
# 4 4 C
# 1 1 D
# 5 5 E
于 2013-02-11T17:40:28.417 に答える
13
#sort dataframe by col
sort.df <- with(df,  df[order(sortbythiscolumn) , ])

#can also sort by more than one variable: sort by col1 and then by col2
sort2.df <- with(df, df[order(col1, col2) , ])

#sort in reverse order
sort2.df <- with(df, df[order(col1, -col2) , ])
于 2013-02-11T17:41:39.940 に答える
9

パッケージ内のarrange関数をplyr使用すると、複数の列で簡単に並べ替えることができます。たとえば、最初に並べ替えDFIDから、で並べ替えるには、次のnumように記述します。

plyr::arrange(DF, ID, desc(num))
于 2013-02-11T17:59:02.317 に答える
5

使用order機能:

set.seed(1)
DF <- data.frame(ID= sample(letters[1:26], 15, TRUE),
                 num = sample(1:100, 15, TRUE),
                 random = rnorm(15),
                 stringsAsFactors=FALSE)
DF[order(DF[,'ID']), ]
   ID num      random
10  b  27  0.61982575
12  e   2 -0.15579551
5   f  78  0.59390132
11  f  39 -0.05612874
1   g  50 -0.04493361
2   j  72 -0.01619026
14  j  87 -0.47815006
3   o 100  0.94383621
9   q  13 -1.98935170
8   r  66  0.07456498
13  r  39 -1.47075238
15  u  35  0.41794156
4   x  39  0.82122120
6   x  94  0.91897737
7   y  22  0.78213630

別の解決策はorderBy、doByパッケージの関数を使用することです。

> library(doBy)
> orderBy(~ID, DF)
于 2013-02-11T17:42:02.547 に答える
2

これは本当に@Ramnathの答えに属していますが、まだ十分な評判がないためコメントできません。パッケージと同じように、パッケージのarrange機能を使用することもできます。dplyrplyr

library(dplyr)
arrange(DF, ID, desc(num))
于 2014-09-08T15:46:18.113 に答える
0

order()列にレベルまたは因子がある場合、関数は失敗します。stringsAsFactors=FALSEdata.frameの作成で使用すると正しく機能します。

于 2016-10-31T13:10:27.040 に答える