如何在R中排序列表?

时间:2017-04-18 16:03:34

标签: r list sorting

我有与此类似的列表列表:

a <- list(
  list(day = 5, text = "foo"),
  list(text = "bar", day = 1),
  list(text = "baz", day = 3),
  list(day = 2, text = "quux")
)

字段数量未知且字段不正常。

如何根据日期对此列表进行排序?我需要列表升序排序。我搜索但我只发现了如何对矢量进行排序。是否可以对列表进行排序?

1 个答案:

答案 0 :(得分:4)

为了对给定的“列表列表”sapply()进行排序,您可以尝试将[[与提取运算符order()一起使用,以从列表中检索数据。这些用于调用a[order(sapply(a, `[[`, i = "day"))] #[[1]] #[[1]]$day #[1] 1 # #[[1]]$text #[1] "bar" # # #[[2]] #[[2]]$day #[1] 2 # #[[2]]$text #[1] "quux" # ...

sapply()

正如this comment中所述,这也可以通过在a[order(sapply(a, function(x) x$day))] 中使用匿名函数来实现:

sortBy <- function(a, field) a[order(sapply(a, "[[", i = field))]
sortBy(a, "day")

当OP在函数定义中使用时,这也有效:

[[

请注意,我们需要将提取运算符$iterations括在反引号或引号中。