假设我在my.list
中有三个数据帧,每个数据帧都有不同的行数。我想重新排序此列表,以便列表的第一个元素是行数最多的数据帧(在下面的示例中为d2
)。
d1 <- data.frame(y1 = c(1, 2, 3),
y2 = c(4, 5, 6))
d2 <- data.frame(y1 = c(3, 2, 1, 3, 2),
y2 = c(6, 5, 4, 2, 5))
d3 <- data.frame(y1 = c(2, 1),
y2 = c(3, 2))
my.list <- list(d1, d2, d3)
预期产出:
str(mylist[[1]]) ## 'data.frame': 5 obs. of 2 variables:
$ y1: num 3 2 1 3 2
$ y2: num 6 5 4 2 5
原因是:我在多个数据框列表中反复绘制第一个元素的数据,并希望确保在调用{{{{{{{{{{{{{{{{{{{{{{{{{{ 1}}。
在plot(my.list[[1]])
调用中,可能更清晰的解决方案是搜索具有最多行数的元素/数据框并绘制该图,但我不确定它会有多容易。
一个可能复杂的因素是偶尔会出现一个数据帧列表,其中有多个数据帧共享最多行数。在那种情况下,调用哪一个并不重要 - 他们都做得很好 - 但我不确定这是否会产生问题。
答案 0 :(得分:3)
假设您的列表名为'lst'
lst= lst[order(sapply(lst,nrow),decreasing = T)]
答案 1 :(得分:1)
使用vapply
获取每个数据框中的行数,然后使用rev(order(...))
将它们从大多数行排序到最少。
nrow_each <- vapply(my.list, nrow, numeric(1))
my.list[rev(order(nrow_each))]
或者在一条难以阅读的行中进行
my.list[rev(order(vapply(my.list, nrow, numeric(1))))]