2

我有一个 data.frame,其中包含几个经理的每日百分比回报,我想对 data.frame 进行排序,以便拥有例如表现最好的 5 个和表现最差的 5 个。

我找到了该函数sort(x),或者rev(sort(x))它们不维护行名,我需要它们来检查经理的姓名。

有小费吗?

4

3 回答 3

4

我在其他一些网站上找到了这个,它对我有用:

如果选择单个列,则默认是删除 data.frame 属性。要抑制此行为,您可以设置 drop = FALSE:

df.sort <- df[order(df[,"x"]), , drop = FALSE]
于 2017-02-28T06:43:53.977 回答
3

我遇到了同样的问题,但是我在 SO 上看到的所有问答都没有处理单列数据框。当您只有一列时,@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 回答