Сначала давайте создадим набор данных с более чем 3 случаями любой компании, просто чтобы мы могли проверить его:
df1<-structure(list(Date = c("March", "March", "March", "April", "April",
"May", "June", "July"), Company = c("A", "A", "B", "B", "A",
"C", "B", "B"), Return = c(0.03, 0.02, 0.01, 0.02, 0.01, 0.02,
0.03, 0.02)), .Names = c("Date", "Company", "Return"), row.names = c(NA,
-8L), class = "data.frame")
Теперь, используя dplyr
:
df1 %>% group_by(Company) %>%
arrange(desc(Return)) %>%
filter(row_number() %in% 1:3) %>%
group_by(Date) %>%
filter(Return==max(Return))
Во-первых, мы сохраняем только три лучших результата для каждой компании, таким образом гарантируя, что, несмотря ни на что, в нашем конечном результате не будет более трех экземпляров для каждой компании.Затем мы группируем по дате и просто сохраняем верхнюю прибыль за каждый месяц.
# A tibble: 5 x 3
# Groups: Date [5]
Date Company Return
<chr> <chr> <dbl>
1 March A 0.03
2 June B 0.03
3 April B 0.02
4 May C 0.02
5 July B 0.02