【问题标题】:How to sort list in R?如何在R中对列表进行排序?
【发布时间】:2017-09-14 13:57:40
【问题描述】:

我有类似这样的列表:

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

具有未知数量的字段,并且这些字段可能是乱序的。

如何根据日期对列表进行排序?我需要对列表进行升序排序。我已经搜索过,但我只找到了如何对向量进行排序。是否可以对列表进行排序?

【问题讨论】:

  • a[order(sapply(a, function(x) x$day))]
  • a[order(sapply(a, `[[`, i = "day"))]
  • @UweBlock 我正在使用sortBy &lt;- function(a, field) a[order(sapply(a, [[, i = field))] 并得到错误Error in order: unimplemented type 'list' in 'orderVector1' @d.b 解决方案也是如此
  • 这个? a[order(sapply(a, unlist)[1,])]
  • 这很奇怪sortBy &lt;- function(a, field) a[order(sapply(a, "[[", i = field))]; sortBy(a, "day") 对我有用。

标签: r list sorting


【解决方案1】:

为了对给定的“列表列表”a 进行排序,您可以尝试使用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"
# ...

正如this comment 中所建议的,这也可以通过在sapply() 中使用匿名函数来实现:

a[order(sapply(a, function(x) x$day))]

这也适用于像 OP 那样在函数定义中使用:

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

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

【讨论】:

    猜你喜欢
    • 2015-03-21
    • 2013-07-01
    • 2015-02-03
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 2020-12-23
    • 1970-01-01
    相关资源
    最近更新 更多