从具有逻辑测试的列表中提取项目(min,max)

时间:2018-02-02 09:40:48

标签: r

我有一份清单清单。我希望能够查询子列表以确定哪个元素具有元素的最大值并返回该列表。

e.g。在以下列表中:

myList <- list(
        list(ID = 1, Sales = 1000, Product = "Car"),
        list(ID = 2, Sales = 2000, Product = "Boat"),
        list(ID = 3, Sales = 1500, Product = "Bike")
              )

我会按照以下方式进行查询:

myList[["where the value for myList$Sales is the maximum across all elements of the same type (i.e. sales) in the list"]])

将返回list(ID = 2, Sales = 2000, Product = "Boat")

这种类型的查询是否可行/直接?是否有一个可以比Base R更好地处理这种情况的包?

1 个答案:

答案 0 :(得分:2)

您可以提取Sales并使用which.max来获取具有最大销售额的元素的索引,即

myList[which.max(sapply(seq_along(myList), function(i) myList[[i]]$Sales))]

#myList[which.min(sapply(seq_along(myList), function(i) myList[[i]]$Sales))] for the MIN


#$ID
#[1] 2

#$Sales
#[1] 2000

#$Product
#[1] "Boat"

或者根据@ zx8754建议的另一种方式:

myList[ which.max(sapply(myList, "[", "Sales")) ]