我有大约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;等。
任何想法?
答案 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中。