2013-05-22 25 views
1

我有一個data.frame與幾個經理的每日百分比回報,我想排序data.frame,以便有,例如最好的5個表演者和最差的5表演。排序R中的data.frame維護行名稱

我發現函數sort(x)rev(sort(x))但他們不維護rownames,我需要它們以檢查管理器的名稱。

任何提示?

+0

有點混亂,我們通常使用'order'在R. – joran

回答

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 
2

我有同樣的問題,但沒有將q & A的我已經看到了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 

如果有更好的方式來做到這一點,我將不勝感激任何指導

+2

我有同樣的問題排序單列和我喜歡的事情的數據幀進行排序kludgy解決方案是添加第二列,例如'df.1col $ 1 < - 1',並且工作。 –

1

我發現這在其他一些網站和它的工作對我來說:

如果選擇一列,那麼默認的是刪除data.frame property.To抑制這種行爲,你可以設置滴= FALSE:

df.sort <- df[order(df[,"x"]), , drop = FALSE]