按照降序排列数据框中的所有列

11

我已经尝试了一段时间,但是找不到合理的解决方案。

我想要按照降序排列数据框(data.frame)的所有列。

例如,以下是样例数据:

CustomData <- data.frame(Value1=rnorm(100,1,2), Value2=rnorm(100,2,3),
                         Value3=rexp(100,5), Value4=rexp(100,2))

适用于一列:

CustomData[order(CustomData$Value1, decreasing=FALSE), ]

如何以合理的方式按升序/降序对所有列数据进行排序?谢谢。
我也尝试了其他地方发布的一些方法,但并没有像所述的那样起作用。
CustomData[do.call(order, as.list(CustomData)),] 

请注意,CustomData [do.call(order,as.list(CustomData)),] 对整个数据框进行排序仅使用第一列以外的列来打破平局,这是与您所述的不同问题 - 您想要独立地对列进行排序。 - Ferdinand.kraft
似乎R的map或apply例程之一可以帮助映射列上的排序。 - Paul
2个回答

17
CD.sorted <- apply(CustomData, 2, sort, decreasing=F)
#2 == column, 1 == row 

我建议阅读一本“R菜谱”——它包含了许多实际的例子,对我在入门时非常有帮助。 - chupvl
是的,我正在阅读/学习,但当时间紧迫时,我没有花费数小时处理此类任务的奢侈条件。谢谢。 - Maximilian
我不是在评判,那只是一本非常好的书,以示例为基础。 - chupvl
2
为了保持数据框的结构,您可以使用以下代码:data.frame(lapply(CustomData,sort,decreasing=F)) - Ferdinand.kraft
@chupvl:《R语言实战》确实非常基础。它适合那些从零开始学习统计和编程的人。 - Maximilian
显示剩余2条评论

8
使用do.call可大幅提高速度。
升序排列。
CustomData[do.call(order, CustomData),]

降序排序的语法稍微复杂一些,因为我们需要传递“decreasing”参数。
CustomData[do.call(order, c(CustomData, list(decreasing=TRUE))),]

甚至可以立即返回一个data.frame :) - bathyscapher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接