我想按 R 中字符变量的字母顺序对数据框进行排序。我尝试使用该order()
函数来执行此操作,但它将我的数据框转换为列表。有人有线索吗?
问问题
144447 次
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
可以很容易地按多列排序。例如,要先按 排序DF
,ID
然后按 递减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
功能。dplyr
plyr
library(dplyr)
arrange(DF, ID, desc(num))
于 2014-09-08T15:46:18.113 回答
0
order()
当列具有级别或因子时,该函数将失败。stringsAsFactors=FALSE
在 data.frame 创建中使用时它可以正常工作。
于 2016-10-31T13:10:27.040 回答