根据R中另一个列表的顺序对列表进行排序

时间:2015-11-11 22:44:49

标签: r

我有大约20个相关的2个列表(即每个列表的位置n中的元素是相关的)。 我现在想要按升序对每个列表第二个列表(dens)中的值进行排序,并对其他列表进行相同的更改,以便在完成后我仍然可以在列表之间建立正确的关系。

示例:

list_1 <- list(a = c(44,47), dens = c(2331,1644))
list_2 <- list(a=66, dens= 1890)
list_3 <- list(a=c(44,46,48,50), dens=c(8000,1452,1596,7521))
mylist <- list(list_1, list_2, list_3)
names(mylist)<-c("ID_1","ID_2","ID_3")

需要的结果:

  

ID_1:

     

$ a:num [1:2] 47 44

     

$ dens:num [1:2] 1644 2331

     

ID_2:

     

$ a:num 66

     

$ dens:num 1890

     

ID_3:

     

$ a:num [1:4] 46 48 50 44

     

$ dens:num [1:4] 1452 1596 7521 8000

我需要一个针对不同List长度的动态解决方案。 我已经尝试过一些东西,但是所有的东西都失败了,像#34这样的消息;对于列表来说不可能&#34;或者&#34;输入必须是原子/因子&#34;等。

任何想法?

2 个答案:

答案 0 :(得分:3)

只需使用嵌套的lapply调用,并在内层使用排序步骤:

> newlist <- lapply(mylist, function(LL) {
               lapply(LL, function(col){ col[order(LL[['dens']]) ]})})
> newlist
$ID_1
$ID_1$a
[1] 47 44

$ID_1$dens
[1] 1644 2331


$ID_2
$ID_2$a
[1] 66

$ID_2$dens
[1] 1890


$ID_3
$ID_3$a
[1] 46 48 50 44

$ID_3$dens
[1] 1452 1596 7521 8000

答案 1 :(得分:3)

我会从list

中取出它
library(dplyr)
do.call(bind_rows, c(.id="id", mylist)) %>% group_by(id) %>% arrange(dens)


     id     a  dens
  (chr) (dbl) (dbl)
1  ID_1    47  1644
2  ID_1    44  2331
3  ID_2    66  1890
4  ID_3    46  1452
5  ID_3    48  1596
6  ID_3    50  7521
7  ID_3    44  8000

如果你有相同长度的向量,我认为没有任何理由不把它们放在data.frame中。