我正在使用dplyr来操作一些数据 . 最初我应用了一些过滤,然后我使用group_by来计算分组聚合 .

但我想创建一个新变量,它只是该组中观察总数的百分比 . 因此,当跨所有组时,此变量的总和将始终为1 .

示例代码块

gaData1 %>%
  filter(deviceCategory == "tablet" & !is.na(SpeedBucket)) %>%
  group_by(SpeedBucket) %>%
  summarize(SampleSize = sum(speedMetricsSample),
            Subscriptions = (sum(goal1Completions, na.rm=T) + sum(goal2Completions, na.rm=T))) %>%
  mutate(SampleBucket = SampleSize / [SUM OF VARIABLE SPEEDMETRICS BUT WITH THE SAME FILTERING APPLIED AS ABOVE]),
         SampleBucketSubscriptions = Subscriptions / SampleSize,
         ConversionRate = SampleBucketSubscriptions / SampleBucket) %>%
  write.csv("all_data.csv", row.names=FALSE)

在我的mutate()函数中,我想创建一个变量SampleBucket,其中分子是speedMetricsSample的总和(来自汇总函数),而分母是所有组中变量的总和,但也应用了在开始时使用的相同过滤器块 .

换句话说,在我使用filter,group_by和summarize创建了一个新的聚合数据集之后,我想采用我使用summarize()构建的新变量并在mutate()中使用它 . 由于我想要保持在开始时应用的过滤,因此我不能仅从新的数据帧获得初始数据帧的总和 .

不是我想要的分母

sum(gaData1$speedMetricsSample) # gives total for variable not including the filtering I created

我想要的,但无需再次编写和指定过滤器

sum(filter(gaData1, deviceCategory == "tablet" & !is.na(SpeedBucket))$speedMetricsSample)

是否有一种聪明的方法告诉R暂时退出组聚合,得到数据帧的总和,然后回到组内?