9
我想排序data.frame
多列,理想情況下使用基地R沒有任何外部包(儘管如果有必要,所以它)。看了How to sort a dataframe by column(s)?,我知道我可以,只要與order()
功能做到這一點,因爲我可以:將data.frame按名稱包含在單個對象中的多列進行排序?
- 知道每一列的明確名稱。
- 有一個單獨的對象,代表要排序的每個單獨列。
但是,如果我只有一個向量包含多個列名,長度未知的事先知道嗎?
說這個載體叫做sortnames
。
data[order(data[, sortnames]), ]
將不起作用,因爲order()
將其視爲單個排序參數。
data[order(data[, sortnames[1]], data[, sortnames[2]], ...), ]
將工作當且僅當我指定確切的正確數量的sortname值,我不會提前知道。
事情我已經看了,但沒有與完全滿意:
eval(parse(text=paste("data[with(data, order(", paste(sortnames, collapse=","), ")), ]")))
。也許這很好,但我已經看到很多使用eval()
的憎恨,所以尋求替代品似乎是值得的。- 我或許可以使用
Deducer
庫來做到這一點sortData()
,但正如我所說的,我寧願避免使用外部軟件包。
如果我對使用外部軟件包過於固執,請告訴我。我會挺過來的。所有的想法提前讚賞!
這太棒了 - 我已經閱讀過過去的do.call幫助文件,並一直認爲這一定非常有幫助,但從來沒有想出使用它的好理由。謝謝! – 2013-05-08 13:38:54
請注意,這將適用於data.frame。對於矩陣,您必須將它們轉換爲列表:'lapply(sortnames,function(x)data [,x])' – mpiktas 2013-05-08 13:42:08