使用rga运行多个Google AnalyticsAPI调用使用数据表分配过滤器和指标

时间:2016-02-04 04:40:12

标签: r google-analytics-api

我想在单个脚本中运行多个GA API调用。电话会根据"来源"而有所不同。 (技术上只是占位符名称)以及每个来源的特定过滤器和指标。

我正在使用带有脚本的RGA包,该脚本允许我指定我想要使用的所有配置文件ID。 lapply函数循环遍历配置文件ID,但我还想循环遍历每个" source"的度量和过滤值。列在数据表中。这比使用40个不同的过滤器在脚本中列出40个不同的调用要有效得多。

这是我使用的脚本:

ids <- c(123456,12345679)

start <- "2015-12-01"
end <- "2015-12-31"

res <- lapply(ids, function(id) {
  ans <- get_ga(id, start.date = start, end.date = end,
        dimensions = "ga:yearMonth",
        metrics = "ga:sessions",
        filters = "ga:medium==organic;ga:landingPagePath!~gppc|sm003|refer=")
        ans$id <- id
        return(ans)
  })

res <- do.call(rbind, res)  
organic <- cbind("organic", res)

字符串&#34;有机&#34;将是包含返回指标的行的占位符名称。

我宁愿做的是使用此数据框来分配值:

a <- c(123456,12345679,123456,12345679,123456,12345679)
b <- c("organic","organic","cpc","cpc","banner","banner")
c <- c("ga:medium==organic;ga:landingPagePath!~gppc|sm003|refer=","ga:medium==organic;ga:landingPagePath!~gppc|sm003|refer=","ga:landingPagePath!~gppc|sm003|refer=","ga:landingPagePath!~gppc|sm003|refer=","ga:medium==banner","ga:medium==banner")
check <- cbind(a,b,c)
colnames(check)[1:3] <- c("profile","source","filters")

然后使用某种应用函数或循环来根据配置文件,过滤器组合返回每一行。

2 个答案:

答案 0 :(得分:1)

您应该形成输入变量data.frame。然后逐行将其传递给get_ga()。像这样:

library(RGA)
authorize()

id <- c(123456, 12345679)
source <- c("organic", "cpc", "banner")
filter <- c("ga:landingPagePath!~gppc|sm003|refer=")

check <- expand.grid(id, source, filter)

res <- lapply(1:nrow(check), function(i) {
    filter <- sprintf("ga:medium==%s;%s", check$Var2[i], check$Var3[i])
    ga_data <- get_ga(check$Var1[i], start.date = start, end.date = end,
                      dimensions = "ga:yearMonth",
                      metrics = "ga:sessions",
                      filters = filter)
    cbind(id = check$Var1[i], source = check$Var2[i], ga_data)
})
res <- data.table::rbindlist(res)

注意:您可以使用lapply包中的mclapply替换parallel

答案 1 :(得分:0)

我不确定我是否正确地解释了我想要做的事情。你的回复包括一个expand.grid,我相信它会为包含的变量的每个组合创建一行。这并不是我想要的。我希望只运行我原始问题中列出的数据框的脚本。我对脚本进行了一些更改,并通过将检查对象转换为data.frame并重命名其他一些对象调用来使其工作。

id <- c(123456, 12345678)
source <- c("organic", "cpc", "banner")
filter <- c("ga:medium==organic;ga:landingPagePath!~gppc|sm003|refer=","ga:medium==organic;ga:landingPagePath!~gppc|sm003|refer=","ga:landingPagePath!~gppc|sm003|refer=","ga:landingPagePath!~gppc|sm003|refer=","ga:medium==banner","ga:medium==banner")

check <- cbind(id,source,filter)
colnames(check)[1:3] <- c("profile","source","filters")
check <- data.frame(check, stringsAsFactors = FALSE)

res <- lapply(1:nrow(check), function(i) {
  filter <- sprintf("ga:medium==%s;%s", check$source[i], check$filters[i])
  ga_data <- get_ga(check$profile[i], start.date = start, end.date = end,
                    dimensions = "ga:yearMonth",
                    metrics = "ga:sessions",
                    filters = filter)
  cbind(id = check$profile[i], source = check$source[i], ga_data)
})
res <- data.table::rbindlist(res)