【问题标题】:How to sort a list of lists in R?如何对R中的列表列表进行排序?
【发布时间】:2015-03-21 22:37:12
【问题描述】:

我正在尝试对 R 中的列表列表进行排序。每个子列表包含一个整数和一个字符串。我的目标是对列表进行排序,以便最终列表按整数升序排序。下面是我想要完成的一个例子:

a <- list(-5,"help")
b <- list(3, "stack")
c <- list(1, "me")
d <- list(10, "overflow")

list.of.lists <- list(a,b,c,d)
magic.sort(list.of.lists)
# Below is not exactly how it would be displayed, but should be understandable
-5, "help"
1, "me"
3, "stack"
10, "overflow"

在 R 中有没有很好的方法来实现这个结果?理想情况下,结果也应该以列表的形式返回。

【问题讨论】:

    标签: r list sorting


    【解决方案1】:

    试试这个:

    list.of.lists[order(sapply(list.of.lists,'[[',1))]
    

    【讨论】:

    • 感谢您快速正确的回答!我试图接受它,但似乎我需要等待几分钟!虽然时钟在接受这一点,但无论如何你可以详细说明每个部分在做什么?我对你对 sapply 的使用感到最困惑。 '[[' 指定了什么?另外, sapply 指定的最后一个参数是什么?我是 R 新手...
    • @mjnichol - 你可以写成:sapply(list.of.lists,function(x) x[[1]] ) - 它只是从每个列表中提取第一个元素,然后将其作为向量返回,然后传递给order。例如。 - a[[1]]'[['(a,1) 是等价的。
    • 啊,我想得差不多了。谢谢!
    • 谢谢。需要消除贡献小于 x% 的水平或保留贡献大于 y% 的水平。非常感谢任何帮助。
    • @makcbe 很难对您的问题进行如此有限的描述。我建议你问自己的问题,但一定要包含一个很好的可重现的例子来说明你的情况。
    【解决方案2】:

    您的 list.of.lists 中有很多结构。根据您需要进行的其他处理,您可能希望将其制成二维列表,如下所示:

    list.2d <- sapply(list.of.lists, cbind)
    

    并且,可能,从那里,进入这样的数据框:

    df <- data.frame(t(list.2d))
    

    (从技术上讲,数据框是一种列表。)按特定的列集排序,然后提取元素的子集可能会更传统一些。 (虽然我也很喜欢这里接受的答案。)

    【讨论】:

    • 我认为这个答案带来了这样的见解,即数据帧是作为恒定长度向量列表实现的,除其他外,这些向量具有很好的语法,可以让我们做问题所问的事情,但增加了转换为一个数据框。谢谢!
    • 我还要补充一点,我更愿意将list.2d 称为matrix.of.lists,因为cbind 会生成一个1 x 2 矩阵,其中每个列表都位于单行的一个单元格中。
    猜你喜欢
    • 2017-09-14
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-22
    • 2014-08-03
    • 2020-12-23
    • 2020-06-09
    相关资源
    最近更新 更多