获取列表中最长的元素

时间:2016-01-12 15:11:33

标签: r list

假设您有一个像

这样的data.frames列表
dfs <- list(
  a = data.frame(x = c(1:4, 7:10), a = runif(8)),
  b = data.frame(x = 1:10, b = runif(10)),
  c = data.frame(x = 1:10, c = runif(10))
)

我现在想要提取此列表中最长的data.frame或data.frames。怎么样?

我被困在这一点上:

library(plyr)
lengths <- lapply(dfs, nrow)
longest <- max(lengths)

2 个答案:

答案 0 :(得分:6)

R中有两个内置函数可以解决您的问题:

  1. which.max:返回列表中第一个元素的索引,该索引等于最大值

    > which.max(lengths)
    [1] 2
    
  2. 哪个函数返回所有TRUE的索引 这里:

    > which(lengths==longest)
    [1] 2 3 
    
  3. 然后,您可以将列表子集化为所需元素:

    dfs[which(lengths==longest)]
    

    将在您的示例中返回b和c。

答案 1 :(得分:4)

cnt <- sapply(dfs, nrow)
dfs[cnt == max(cnt)]

或者,如果您只需要第一次出现的最大长度:

dfs[which.max(cnt)]