使用 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)
我有多个 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)