R 月报 - 页面浏览量数据 - 页面重复但页面浏览量不同。有办法结合吗?
R monthly report - pageview data - duplicate pages but different pageviews. Is there a way to combine?
我正在尝试创建一些网络指标数据的月度报告,遗憾的是利益相关者希望看到每一个 URL。这通常没问题,但他们忘记在 Google Analytics 中排除一些跟踪参数,因此许多 URLs 与 fbclid 等参数重复。它看起来像的一个例子,除了实际上我有大约 900 URLs:
df <- tribble(
~month, ~url, ~pageviews, ~bouncerate,
"04", "services-we-provide", 800, 30,
"04", "services-we-provide?fbclid=iwar1m1xyneodn1z3inhbdbe", 5, 20,
"04", "services-we-provide?fbclid=idwiw1xyneodn1z3inhbdbe", 1, 1,
"04", "services-we-provide?fbclid=iwar1m1xyneodn1zrewerwe", 40, 30
)
month url pageviews bouncerate
<chr> <chr> <dbl> <dbl>
1 04 services-we-provide 800 30
2 04 services-we-provide?fbclid=iwar1m1xyneodn1z3inhbdbe 5 20
3 04 services-we-provide?fbclid=idwiw1xyneodn1z3inhbdbe 1 1
4 04 services-we-provide?fbclid=iwar1m1xyneodn1zrewerwe 40 30
我已经使用 mutate(pagePath = str_replace(pagePath, "\?fbclid.*", ""))
删除了 fbclid 位,但是我有很多行在 url
列中具有相同的值,但在 pageviews
和 bouncerate
列。在下面的示例中,我如何将第 2、3、4 行合并到第 1 行中,保留 month
中的值但对 pageviews
中的值求和(最好是 bouncerate
中的平均值)。还应该注意我仍然需要 url 列存在。所以它会简单地变成:
month url pageviews bouncerate
<chr> <chr> <dbl> <dbl>
1 04 services-we-provide 846 30
所有这些都将附加到 Google Sheet 中,所以我想我可以简单地使用一个 pivot table 自动为我删除重复项,但我仍然想知道如何在 R 中做到这一点,否则 sheet 会很快变得混乱!
感谢您的帮助
您可以使用 aggregate
来做到这一点。
df <- transform(df, url=gsub("\?fbclid.*", "", url))
df <- aggregate(cbind(pageviews, bouncerate) ~ url, df, function(x)
c(sum=sum(x), mean=mean(x)))
df
# url pageviews.sum pageviews.mean bouncerate.sum bouncerate.mean
# 1 services-we-provide 846.0 211.5 81.00 20.25
或您也可能想尝试 ave
,因为当数据维度不应更改时它可能会有所帮助。
df <- within(df, {
url <- gsub("\?fbclid.*", "", url)
pageviews <- ave(pageviews, url, FUN=sum)
bouncerate <- ave(bouncerate, url, FUN=mean)
})
当然这里我们可能要删除重复的
df <- df[!duplicated(df),]
# month url pageviews bouncerate
# 1 04 services-we-provide 846 20.25
你在正确的轨道上,我建议你看看 dplyr
,因为它提供了一个非常简单而强大的数据操作语义。
在你的情况下,你可以一次性完成所有事情:
library(tibble)
library(dplyr)
library(stringr)
df %>%
mutate(url = str_replace(url, "\?fbclid.*", "")) %>% # remove tags
group_by(month, url) %>%
summarise(pageviews = sum(pageviews),
bouncerate = mean(bouncerate))
# A tibble: 1 x 4
# Groups: month [1]
# month url pageviews bouncerate
# <chr> <chr> <dbl> <dbl>
#1 04 services-we-provide 846 20.2
我正在尝试创建一些网络指标数据的月度报告,遗憾的是利益相关者希望看到每一个 URL。这通常没问题,但他们忘记在 Google Analytics 中排除一些跟踪参数,因此许多 URLs 与 fbclid 等参数重复。它看起来像的一个例子,除了实际上我有大约 900 URLs:
df <- tribble(
~month, ~url, ~pageviews, ~bouncerate,
"04", "services-we-provide", 800, 30,
"04", "services-we-provide?fbclid=iwar1m1xyneodn1z3inhbdbe", 5, 20,
"04", "services-we-provide?fbclid=idwiw1xyneodn1z3inhbdbe", 1, 1,
"04", "services-we-provide?fbclid=iwar1m1xyneodn1zrewerwe", 40, 30
)
month url pageviews bouncerate
<chr> <chr> <dbl> <dbl>
1 04 services-we-provide 800 30
2 04 services-we-provide?fbclid=iwar1m1xyneodn1z3inhbdbe 5 20
3 04 services-we-provide?fbclid=idwiw1xyneodn1z3inhbdbe 1 1
4 04 services-we-provide?fbclid=iwar1m1xyneodn1zrewerwe 40 30
我已经使用 mutate(pagePath = str_replace(pagePath, "\?fbclid.*", ""))
删除了 fbclid 位,但是我有很多行在 url
列中具有相同的值,但在 pageviews
和 bouncerate
列。在下面的示例中,我如何将第 2、3、4 行合并到第 1 行中,保留 month
中的值但对 pageviews
中的值求和(最好是 bouncerate
中的平均值)。还应该注意我仍然需要 url 列存在。所以它会简单地变成:
month url pageviews bouncerate
<chr> <chr> <dbl> <dbl>
1 04 services-we-provide 846 30
所有这些都将附加到 Google Sheet 中,所以我想我可以简单地使用一个 pivot table 自动为我删除重复项,但我仍然想知道如何在 R 中做到这一点,否则 sheet 会很快变得混乱!
感谢您的帮助
您可以使用 aggregate
来做到这一点。
df <- transform(df, url=gsub("\?fbclid.*", "", url))
df <- aggregate(cbind(pageviews, bouncerate) ~ url, df, function(x)
c(sum=sum(x), mean=mean(x)))
df
# url pageviews.sum pageviews.mean bouncerate.sum bouncerate.mean
# 1 services-we-provide 846.0 211.5 81.00 20.25
或您也可能想尝试 ave
,因为当数据维度不应更改时它可能会有所帮助。
df <- within(df, {
url <- gsub("\?fbclid.*", "", url)
pageviews <- ave(pageviews, url, FUN=sum)
bouncerate <- ave(bouncerate, url, FUN=mean)
})
当然这里我们可能要删除重复的
df <- df[!duplicated(df),]
# month url pageviews bouncerate
# 1 04 services-we-provide 846 20.25
你在正确的轨道上,我建议你看看 dplyr
,因为它提供了一个非常简单而强大的数据操作语义。
在你的情况下,你可以一次性完成所有事情:
library(tibble)
library(dplyr)
library(stringr)
df %>%
mutate(url = str_replace(url, "\?fbclid.*", "")) %>% # remove tags
group_by(month, url) %>%
summarise(pageviews = sum(pageviews),
bouncerate = mean(bouncerate))
# A tibble: 1 x 4
# Groups: month [1]
# month url pageviews bouncerate
# <chr> <chr> <dbl> <dbl>
#1 04 services-we-provide 846 20.2