Эффективный способ найти максимальную скорость для каждой даты - PullRequest
2 голосов
/ 10 июня 2019

У меня есть большой список, состоящий из нескольких фреймов данных, которые выглядят так, как показано ниже.

    ls.DataFrame[[1]]
    Date            Velocity
    10/1/1990           5.5
    10/1/1990           5.5
    10/1/1990           5.5
    10/1/1990           5.2
    10/1/1990           5.2
    10/1/1990           5.2
    10/2/1990           5.2
    10/2/1990           5.2
    10/2/1990           5.2
    10/2/1990           5.2
    10/2/1990           5
    10/2/1990           5.2
    10/2/1990           5.2
    10/3/1990           4.2
    10/3/1990           4.2
    10/3/1990           4.2
    10/3/1990           4.4
    10/3/1990           4.2
    10/3/1990           3.7
    10/3/1990           3.7

Мой желаемый вывод - сохранить дату и максимальную скорость для этой конкретной даты.Вот то, что я хотел бы, чтобы вывод был похож на

    Date            Velocity
    10/1/1990           5.5
    10/2/1990           5.2
    10/3/1990           4.4     

Я пытался сделать это, но не работает должным образом

    max(ls.Dataframe[[1]]Velocity[ls.dataframe[[1]]$Date]

1 Ответ

2 голосов
/ 10 июня 2019

Мы можем выполнить цикл по list с помощью map, сгруппированным по 'Date', получить max из 'Velocity' с tidyverse

library(tidyverse)
map(ls.Dataframe, ~ .x %>%
                      group_by(Date) %>%
                      summarise(Velocity = max(Velocity))

Или с data.table, чтобы сделать это более эффективно

library(data.table)
lapply(ls.Dataframe, function(x) 
     as.data.table(x)[, .(Velocity = max(Velocity)), by = Date])

В base R мы выполняем цикл с lapply и используем aggregate, но это будет медленно

lapply(ls.Dataframe, function(x) aggregate(Velocity ~ Date, x, FUN = max))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...