我想在单个脚本中运行多个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")
然后使用某种应用函数或循环来根据配置文件,过滤器组合返回每一行。
答案 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)