我有一个data.frame,其中包含几个Managers的每日百分比回报,我想对data.frame进行排序,以便拥有最好的5个表现者和最差的5个表演者。
我找到了函数sort(x)
或rev(sort(x))
,但它们不维护rownames,我需要它们来检查Managers的名称。
任何提示?
答案 0 :(得分: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
答案 1 :(得分:2)
我遇到了同样的问题,但在SO上看到的Q& A I都没有处理单列数据帧。当你只有一列时,@ 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
我不得不诉诸的kludgy解决方案是对数据和行进行排序:
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
如果有更好的方法可以做到这一点,我将不胜感激任何指导
答案 2 :(得分:2)
我在其他网站上找到了这个,它对我有用:
如果选择单个列,则默认为删除data.frame property.To抑制此行为,您可以设置drop = FALSE:
i