我有一个 data.frame,其中包含几个经理的每日百分比回报,我想对 data.frame 进行排序,以便拥有例如表现最好的 5 个和表现最差的 5 个。
我找到了该函数sort(x)
,或者rev(sort(x))
它们不维护行名,我需要它们来检查经理的姓名。
有小费吗?
我在其他一些网站上找到了这个,它对我有用:
如果选择单个列,则默认是删除 data.frame 属性。要抑制此行为,您可以设置 drop = FALSE:
df.sort <- df[order(df[,"x"]), , drop = FALSE]
我遇到了同样的问题,但是我在 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
如果有更好的方法可以做到这一点,我将不胜感激任何指导
你想要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