使用 rga 运行 多个 Google 分析 API 调用 使用数据 Table 分配过滤器和指标

Using rga to run multiple Google Analytics API Calls Using a Data Table to Assign Filters and Metrics

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

我将 RGA 包与一个脚本一起使用,该脚本允许我指定我想使用的所有配置文件 ID。 lapply 函数循环遍历配置文件 ID,但我还想循环遍历数据 table 中列出的每个 "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)

字符串 "organic" 将是包含指标的行的占位符名称 returned。

我宁愿做的是使用这个数据框来赋值:

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")

然后根据配置文件、过滤器组合对return每一行使用某种应用函数或循环。

您应该形成输入变量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 替换为 parallel 包中的 mclapply

我不确定我是否正确解释了我想做的事情。您的回复包含一个 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)