2013-06-27 81 views
4

好吧,我被困在一个哑巴循环中。我通过How to sort a dataframe by column(s)?阅读了有用的想法,但需要更多提示。我想要一个函数,它可以使用任意数量的列的矩阵,并按顺序排列所有列。例如,对于具有N列的矩阵foo, 等效于foo[order(foo[,1],foo[,2],...foo[,N]),]。我很乐意使用withby构造,并在必要时定义我的矩阵的colnames,但我无法弄清楚如何自动化收集参数到order(或with)。 或者,我应该说,我可以用paste然后call来构建整个血腥字符串,但我确信有更直接的方法。如何按所有列排列矩阵

回答

8

最优雅(为“优雅”的某些值)的办法是把它变成一个数据帧,并使用do.call

foo[do.call(order, as.data.frame(foo)), ] 

这工作,因为一个数据帧只是变量list与一些相关的属性,并可以传递给期望list的函数。

+0

谢谢!我一直在用'do.call'进行分析,只是简单地忘记了强迫数据框。 –