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 列中具有相同的值,但在 pageviewsbouncerate 列。在下面的示例中,我如何将第 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