Поиск соответствующих показателей для нескольких стран с использованием данных, извлеченных с помощью пакета ОЭСР в R - PullRequest
0 голосов
/ 12 июля 2020

Я пытаюсь найти индикаторы, которые обычно доступны для трех стран с пакетом OECD. Это то, что я делал, но это не работает:

# AVAILABLE MONTHLY DATA - OECD

list.of.packages <- c("OECD", "dplyr")
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]
if(length(new.packages)) install.packages(new.packages)

library(OECD)
library(dplyr)

dataset <- "MEI" # MAIN ECONOMIC INDICATORS
dstruc <- get_data_structure(dataset)
list_MEI <- dstruc$SUBJECT
str(dstruc)
filter_list <- list(c("MEX", "BRA", "RUS"), "", "", "M") # SEQUENCE SENSITIVE
MEI_INDICATORS <- get_dataset(dataset = dataset, filter = filter_list)

MEI_INDICATORS_BRA <- subset(MEI_INDICATORS, LOCATION == "BRA") %>%
  select(LOCATION, SUBJECT, MEASURE)
MEI_INDICATORS_MEX <- subset(MEI_INDICATORS, LOCATION == "MEX") %>%
  select(LOCATION, SUBJECT, MEASURE)
MEI_INDICATORS_RUS <- subset(MEI_INDICATORS, LOCATION == "RUS") %>%
  select(LOCATION, SUBJECT, MEASURE)

MEI_INDICATORS_ALL <- merge(MEI_INDICATORS_BRA, MEI_INDICATORS_MEX, by = "SUBJECT")
MEI_INDICATORS_ALL <- merge(MEI_INDICATORS_ALL, MEI_INDICATORS_RUS, by = "SUBJECT")

MEI.AVAILABLE.4ALL <- merge(MEI_INDICATORS_ALL, list_MEI, by = "SUBJECT") %>%
  arrange(SUBJECT)

Не могли бы вы указать более эффективный способ поиска совпадений? Заранее благодарим!

ОБНОВЛЕНИЕ

Как указано @ alex_jwb90, я «ищу кортежи SUBJECT и MEASURE, которые появляются во всех трех наборах. ".

Ответы [ 2 ]

2 голосов
/ 13 июля 2020

Я понимаю, что вы хотите отфильтровать набор данных MEI_INDICATORS, который вы подготовили, чтобы включить только те SUBJECT индикаторы, которые доступны для всей России, Бразилии и Мексики, не так ли?

// ОБНОВЛЕНИЕ: как указано в комментариях ниже, OP ищет кортежи SUBJECT и MEASURE, которые появляются во всех трех наборах, а не только SUBJECT. Изменен ответ, чтобы отразить это.

Попробуйте следующее:

library(dplyr)

[...]

MEI.AVAILABLE.4ALL <- MEI_INDICATORS %>%
  group_by(SUBJECT, MEASURE) %>%
  filter(
    any(LOCATION == "BRA"),
    any(LOCATION == "MEX"),
    any(LOCATION == "RUS")
  ) %>%
  ungroup() %>%
  select(LOCATION, SUBJECT, MEASURE) %>%
  arrange(SUBJECT)

В качестве альтернативы, если вы хотите подготовить список субъектов, которые появляются в трех отдельных локальных наборах данных, вы можете использовать intersect (хотя вам придется вложить его), например:

library(dplyr)

[...]

common_subjectXmeasure <- MEI_INDICATORS_BRA %>%
  select(SUBJECT, MEASURE) %>%
  intersect( MEI_INDICATORS_MEX %>% select(SUBJECT, MEASURE) ) %>%
  intersect( MEI_INDICATORS_RUS %>% select(SUBJECT, MEASURE) ) %>%
  distinct()

MEI.AVAILABLE.4ALL <- common_subjectXmeasure %>%
  left_join(MEI_INDICATORS, by = c('SUBJECT', 'MEASURE')) %>%
  select(LOCATION, SUBJECT, MEASURE) %>%
  arrange(SUBJECT)
0 голосов
/ 13 июля 2020

Исходя из ответа @ alex_jwb90, это полный ответ:

# AVAILABLE MONTHLY DATA - OECD

list.of.packages <- c("OECD", "dplyr")
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]
if(length(new.packages)) install.packages(new.packages)

library(OECD)
library(dplyr)

dataset <- "MEI" # MAIN ECONOMIC INDICATORS
dstruc <- get_data_structure(dataset)
list_MEI <- dstruc$SUBJECT
str(dstruc)
filter_list <- list(c("MEX", "BRA", "RUS"), "", "", "M") # SEQUENCE SENSITIVE
MEI_INDICATORS <- get_dataset(dataset = dataset, filter = filter_list)

MEI.AVAILABLE.4ALL <- MEI_INDICATORS %>%
  group_by(SUBJECT, MEASURE) %>%
  filter(
    any(LOCATION == "BRA"),
    any(LOCATION == "MEX"),
    any(LOCATION == "RUS")
  ) %>%
  ungroup() %>%
  select(LOCATION, SUBJECT, MEASURE) %>%
  arrange(SUBJECT) %>%
  unique()

colnames(list_MEI) <- c("SUBJECT", "LABEL")

MEI.AVAILABLE.4ALL <- merge(MEI.AVAILABLE.4ALL, list_MEI, by = "SUBJECT") %>%
  select(-LOCATION) %>%
  unique() %>%
  arrange(LABEL)

Наконец, есть 111 показателей, содержащих данные по Бразилии, Мексике и России (общие показатели).

...