Как рассчитать максимальное значение за день в R - PullRequest
0 голосов
/ 09 июня 2018

У меня есть следующий пример набора данных:

count date
1   11/25/16
2   11/29/16
3   11/30/16
4   12/4/16
5   12/7/16
6   12/8/16
7   12/9/16
8   12/10/16
9   12/11/16
10  12/12/16
11  12/13/16
12  12/17/16
13  12/17/16
14  12/18/16
15  12/19/16
16  12/20/16
17  12/20/16
18  12/20/16
19  12/20/16
20  12/20/16
21  12/21/16
22  12/21/16
23  12/21/16
24  12/21/16
25  12/21/16
26  12/22/16
27  12/22/16
28  12/22/16
29  12/22/16
30  12/22/16
31  12/23/16
32  12/23/16
33  12/23/16
34  12/23/16
35  12/23/16
36  12/23/16

Я хотел бы рассчитать максимальное число для каждой даты.Обратите внимание, что окончательное значение не всегда будет самым большим в моем реальном наборе данных.В идеале мой вывод не должен иметь дубликатов.

Ответы [ 3 ]

0 голосов
/ 09 июня 2018

order ваш фрейм данных, тогда мы отбрасываем duplicated по столбцу даты

dt=dt[order(-dt$count),]
dt=dt[!duplicated(dt$date),]
dt
   count     date
36    36 12/23/16
30    30 12/22/16
25    25 12/21/16
20    20 12/20/16
15    15 12/19/16
14    14 12/18/16
13    13 12/17/16
11    11 12/13/16
10    10 12/12/16
9      9 12/11/16
8      8 12/10/16
7      7  12/9/16
6      6  12/8/16
5      5  12/7/16
4      4  12/4/16
3      3 11/30/16
2      2 11/29/16
1      1 11/25/16
0 голосов
/ 09 июня 2018

Вы также можете использовать функции which.max() и group_by():

library(lubridate)
library(dplyr)

df %>% 
  group_by(date) %>% 
  summarise(MaxCount = count[which.max(count)])

Результат:

# A tibble: 6 x 2
  date       MaxCount
  <date>        <int>
1 2018-01-01        5
2 2018-01-02       10
3 2018-01-03        9
4 2018-01-04       10
5 2018-01-05        8
6 2018-01-06       10

Образец набора данных (отредактировано из @Yifu Yan):

set.seed(123)
df <- tibble(count = sample(1:10,20,replace = T),
             date = sample(ymd("2018-01-01") + days(0:5),20,replace = T)) %>%
  arrange(date)
0 голосов
/ 09 июня 2018

A dplyr способ сделать это:

library(dplyr)
library(lubridate)

#Sample data set
set.seed(123)
df <- tibble(x = sample(1:10,20,replace = T),
       y = sample(ymd("2018-01-01") + days(0:5),20,replace = T)) %>%
    arrange(y)


df %>%
    group_by(y) %>%
    dplyr::filter(x == max(x)) %>%
    distinct(x,.keep_all = T) %>%
    ungroup()

Результат:

# A tibble: 6 x 2
      x y         
  <int> <date>    
1     5 2018-01-01
2    10 2018-01-02
3     9 2018-01-03
4    10 2018-01-04
5     8 2018-01-05
6    10 2018-01-06
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...