Ссылка на несколько списков в цикле API с помощью R - PullRequest
1 голос
/ 02 мая 2019

Я работаю с API Google Analytics, и мне нужно извлечь данные из нескольких представлений (n = 11, в основном разные базы данных с одинаковыми типами и форматами данных).Однако в дополнение к этому мне нужно указать дату начала и окончания отдельно, чтобы получить данные за каждый месяц за несколько месяцев (n = 6).Более длинные диапазоны дат не подходят, так как данные агрегируются между указанными датами.

Я использую для этого пакет RGA, так как мне нужно извлечь многоканальные данные.

Моя попытка получить данные, но только на один месяц.Я не уверен, как указать списки дат начала и окончания каждого месяца.Рад использовать другой подход, если это не оптимально.*нота.Последний df также нуждается в вводе даты относительно идентификатора представления, чего не делает мой код.

Также, пожалуйста, дайте мне знать, если я написал этот вопрос неправильно, и как я могу улучшить его.

Спасибо за любой совет заранее.

# install.packages("RGA")
library(RGA)
library(lubridate)

#get list of month dates for last 6 months
end_months <- ymd("2018-11-01")+ months(0:6)-days(1)
start_months <- ymd("2018-10-01")+ months(0:6)

#list of view ids required to make api call (pseudonymised)
viewId <- c(26494958, 477448251,
       47843527, 96382507,
       537821552, 67482819)

for (i in viewId) {
 ga_data_temp <-
         get_mcf(i, #=This is a (dynamic) ViewID parameter
              start.date = "2019-01-01", end.date = "2019-01-31",
                dimensions=c('mcf:conversionGoalNumber', 'mcf:basicChannelGroupingPath'),
                metrics=c('mcf:totalConversions', 'mcf:totalConversionValue'))
 ga_data_temp$viewId <- i
 ga_data_final <- rbind(ga_data_final, ga_data_temp)
 }

1 Ответ

0 голосов
/ 02 мая 2019

Рассмотрим expand.grid для построения фрейма данных для всех комбинаций месяца и векторов просмотра.Затем выполните поэлементное итерирование по столбцам с помощью Map, который создает список фреймов данных, которые должны быть связаны строкой один раз в конце (настоятельно рекомендуется альтернатива, чем использование rbind внутри цикла).Также используйте within для добавления столбца viewId :

params_df <- expand.grid(start_months=start_months, end_months=end_months, viewId=viewId)

get_api_data <- function(str, end, vId)
    within(get_mcf(vId,                          # =This is a (dynamic) ViewID parameter
                   start.date = str, end.date = end,
                   dimensions=c('mcf:conversionGoalNumber', 'mcf:basicChannelGroupingPath'),
                   metrics=c('mcf:totalConversions', 'mcf:totalConversionValue')),
           viewId <- vId)
)

# ELEMENT-WISE LOOP
df_list <- Map(get_api_data, params_df$start_month, params_df$end_month, params_df$viewId)
# df_list <- with(params_df, Map(get_api_data, start_month, end_month, viewId))  

# BIND ALL DF ELEMENTS TOGETHER
final_df <- do.call(rbind, df_list)
...