假设您有一个像
这样的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)
答案 0 :(得分:6)
R中有两个内置函数可以解决您的问题:
which.max
:返回列表中第一个元素的索引,该索引等于最大值
> which.max(lengths)
[1] 2
哪个函数返回所有TRUE的索引 这里:
> which(lengths==longest)
[1] 2 3
然后,您可以将列表子集化为所需元素:
dfs[which(lengths==longest)]
将在您的示例中返回b和c。
答案 1 :(得分:4)
cnt <- sapply(dfs, nrow)
dfs[cnt == max(cnt)]
或者,如果您只需要第一次出现的最大长度:
dfs[which.max(cnt)]