Существует ли функция R для получения максимального значения переменной, появляющейся несколько раз в течение нескольких лет? - PullRequest
1 голос
/ 05 октября 2019

Я пытаюсь получить максимальное значение переменной, появляющейся несколько раз в течение нескольких лет между двумя списками. Например, у меня есть эти два списка. У list_1 есть данные только за 2002 год, тогда как у list_2 есть данные за 2001–2018 годы. Я хочу сначала связать их, а затем для каждой страны и соответствующего года, чтобы сохранить максимальное значение двух.

1 2002   Australia     2404
2 2002 New Zealand       90
3 2002        Fiji       37


    time            exporter quantity
1   2001               China        0
2   2001                Fiji        0
3   2001        South Africa        0
4   2001              Brazil        0
5   2001              Greece        0
6   2001              Turkey        0
7   2001         New Zealand        1
8   2001  Korea, Republic of        0
40  2002           Australia        0
......
29  2002                Fiji      113
34  2002         New Zealand       18
.......


I used bind_rows to combine the two lists:

df <- bind_rows(list_1, list_2)

It then becomes:

    time            exporter quantity
1   2002           Australia     2404
2   2002         New Zealand       90
3   2002                Fiji       37
4   2001               China        0
5   2001                Fiji        0
6   2001        South Africa        0
7   2001              Brazil        0
8   2001              Greece        0
9   2001              Turkey        0
10  2001         New Zealand        1
11  2001  Korea, Republic of        0
12  2001           Singapore        0
13  2001            Malaysia        0
14  2001             Bahrain        0
...........

Вновый список привязок, я ожидаю, что в странах: Австралии, Фиджи и Новой Зеландии будут значения 2404, 90 и 113 в качестве значений для 2002 года. Остальные страны останутся прежними, поскольку они не указаны в списке_1. Итак, код, который я ищу, сравнит страны за те же годы, например, Австралию за 2002 ..... 2018 года из list_1 и 2002 ... 2018 из list_2, и сохранит максимальное количество этого года и страны в новом списке.

1 Ответ

0 голосов
/ 05 октября 2019

Вы можете применить следующий dplyr скрипт к df, чтобы получить желаемый результат.

library(dplyr)
df%>% group_by(time, exporter) %>%
  filter(quantity == max(quantity)) %>%
  arrange(desc(time, exporter, quantity))
# -------------------------------------------------------------------------
# # A tibble: 11 x 3
# # Groups:   time, exporter [11]
#   time exporter    quantity
#   <dbl> <chr>          <dbl>
# 1  2002 Australia       2404
# 2  2002 New Zealand       90
# 3  2002 Fiji             113
# 4  2001 china              0
# 5  2001 Fiji               0
# 6  2001 SA                 0
# 7  2001 Brazil             0
# 8  2001 Greece             0
# 9  2001 Turkey             0
# 10 2001 New Zealand        1
# 11 2001 KRP                0

Данные

#dput(list_1)
structure(list(time = c(2002, 2002, 2002), exporter = c("Australia", 
"New Zealand", "Fiji"), quantity = c(2404, 90, 37)), class = "data.frame", row.names = c(NA, 
-3L))

#dput(list_2)
structure(list(time = c(2001, 2001, 2001, 2001, 2001, 2001, 2001, 
2001, 2002, 2002, 2002), exporter = c("china", "Fiji", "SA", 
"Brazil", "Greece", "Turkey", "New Zealand", "KRP", "Australia", 
"Fiji", "New Zealand"), quantity = c(0, 0, 0, 0, 0, 0, 1, 0, 
0, 113, 18)), row.names = c(NA, -11L), class = "data.frame")

#dput(df)
structure(list(time = c(2002, 2002, 2002, 2001, 2001, 2001, 2001, 
2001, 2001, 2001, 2001, 2002, 2002, 2002), exporter = c("Australia", 
"New Zealand", "Fiji", "china", "Fiji", "SA", "Brazil", "Greece", 
"Turkey", "New Zealand", "KRP", "Australia", "Fiji", "New Zealand"
), quantity = c(2404, 90, 37, 0, 0, 0, 0, 0, 0, 1, 0, 0, 113, 
18)), row.names = c(NA, -14L), class = "data.frame")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...