我正在使用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暂时退出组聚合,得到数据帧的总和,然后回到组内?