2016-01-12 3 views
3

Предположим, у вас есть список 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) 
+5

День # 131231, все еще пытаясь выяснить библиотеку (plyr) 'part ... –

ответ

6

Есть две встроенные функции в R который мог бы решить ваш вопрос по моему мнению:

  1. which.max: возвращает индекс первого элемента вашего списка, который равен максимальному

    > which.max(lengths) 
    [1] 2 
    
  2. , который возвращает все индексы, которые истинны здесь:

    > which(lengths==longest) 
    [1] 2 3 
    

Затем вы можете подмножить свой список на нужный элемент:

dfs[which(lengths==longest)] 

вернет b и c в вашем примере.

+0

@RichardScriven: Вы абсолютно правы, однако название предполагает, что нужно вернуть только один элемент («самый длинный»). Возможно, я не выделил в первом ответе ** первый **. Извините за плохое форматирование. – DeveauP

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

Или, если вам нужно только первое вхождение максимальной длины:

dfs[which.max(cnt)] 
+1

или использовать функцию which.max для подмножества вашего списка. 'dfs [who.max (cnt)]' – Jimbou

+1

OP сказал «кадр данных или кадры данных», поэтому использование 'which.max' неверно. – Spacedman

+0

Да, вы правы. 'which.max', даст только первый удар. – Jimbou

Смежные вопросы