2013-11-28 28 views
1

我創建的數據列表如下圖所示使用ORDER功能的「名單」中的數據R中

> sites 
[[1]] 
    ANLL_ID  lat  long  X  Y Depth_m  
15  B3 23.78038 90.63857 259364 2631912 94.2 
16  B4 23.78038 90.63857 259364 2631912 29.9 
17  B5 23.78038 90.63857 259364 2631912 47.1 
18  B6 23.78038 90.63857 259364 2631912 51.5 
19  B7 23.78038 90.63857 259364 2631912  6.0 
20  B8 23.78038 90.63857 259364 2631912 10.2 
21  B9 23.78038 90.63857 259364 2631912 25.6 


[[2]] 
    ANLL_ID lat long  X  Y Depth_m      
22  C1 23.79 90.611 256572 2633025  15 
23  C2 23.79 90.611 256572 2633025  8 
24  C3 23.79 90.611 256572 2633025  10 
25  C4 23.79 90.611 256572 2633025  94 
26  C5 23.79 90.611 256572 2633025  53 

... ... 

如果我要訂購/排序(保持所有變量)的一長串使用如何排序根據 'Depth_m' 作爲sapply:

sites.srt<- lapply(1:length(sites), 
        function(i) sites[order(sites[[i]]$Depth_m),]) 

但[R拋出一個錯誤 -

Error in sites[order(sites[[i]]$Depth_m), ] : 
    incorrect number of dimensions 

我知道這是怎麼回事,因爲數據是爲L IST,而不是數據框。我可以把它變成一個數據框。但將數據保存爲列表可以使我更容易進行進一步處理。有沒有什麼辦法在列表中排序 - [[1]],[[2]],... [[15]]?

+0

您是否想對列表中每個數據框進行排序/排序?或者您想要重新排列這些數據框在列表中的順序嗎?如果是後者,假設這個變量在每個數據幀中有很多不同的值,那麼這是基於'Depth_m'怎麼會發生的?你能提供一個你想要輸出結果的例子嗎? – gung

+0

我希望在每個列表中重新洗牌,例如對於[[1]],數據應根據Depth_m排列,即6,10.2,25.6等等。使用ORDER將重新排列基於一個的所有變量。 – ToNoY

+0

對於你的工作方式,你需要'function(i)sites [[i]] [order(sites [[i]] $ Depth_m),])',但顯然James方法好得多,項目直接而不是指數。 – flodel

回答

2

如果我理解正確

lapply(sites, function(x) x[order(x$Depth_m),]) 

會給你想要的東西。

+0

+1 - plyr的'arrange'函數可以使一個相當簡潔的'lapply(sites,arrange,Depth_m)' – flodel