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