【问题标题】:How to sort data within a "list" using ORDER function in R如何使用 R 中的 ORDER 函数对“列表”中的数据进行排序
【发布时间】:2013-11-28 17:26:45
【问题描述】:

我已经创建了如下所示的数据列表

> 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

我知道它正在发生,因为数据是 LIST,而不是数据框。我可以把它变成一个数据框。但是将数据保留为列表使我更容易进行进一步处理。有没有办法在列表中排序 - [[1]]、[[2]]、... [[15]]?

【问题讨论】:

  • 您想对每个数据框在列表中的位置进行排序/排序,还是要重新调整这些数据框在列表中的顺序?如果是后者,这应该如何基于Depth_m 发生,因为这个变量在每个数据帧中都有许多不同的值?您能否举例说明您希望输出的样子?
  • 我希望它在每个列表中重新洗牌,例如对于 [[1]],数据应按照 Depth_m 排列,即 6、10.2、25.6 等。使用 ORDER 将基于一个重新排列所有变量。
  • 对于您的工作方法,您需要function(i) sites[[i]][order(sites[[i]]$Depth_m),]),但显然 James 方法要好得多,即直接循环列表项而不是索引。

标签: r list sorting


【解决方案1】:

如果我理解正确

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

会给你你想要的。

【讨论】:

  • +1 - plyr 的arrange 函数也可以使lapply(sites, arrange, Depth_m) 非常简洁
猜你喜欢
  • 1970-01-01
  • 2020-06-19
  • 1970-01-01
  • 2019-10-01
  • 1970-01-01
  • 2022-12-18
  • 2020-07-04
  • 2020-06-10
  • 2012-11-30
相关资源
最近更新 更多