在group_by命令下的语句中,如何sum()不仅仅是在组内的所有行?

时间:2016-12-11 21:07:52

标签: r dplyr

我使用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的总和(来自汇总函数),而分母是所有组中变量的总和,但也应用了相同的过滤器&# 39;在块的开头使用。

换句话说,在使用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暂时退出群组聚合,获取数据帧的总和,然后再回到群组内?

0 个答案:

没有答案