我有一个数据集,其中有一百万条记录,我需要在第一个子集数据之后进行聚合。提供良好的可重复性样品很困难,因为在这种情况下,样品量会相当大 - 但我会尽量尝试。由dplyr中的子集聚合
,我跟长相这样工作了数据的随机样本:
> df
auto_id user_id month
164537 7124 240249 10
151635 7358 226423 9
117288 7376 172463 9
177119 6085 199194 11
128904 7110 141608 9
157194 7143 241964 9
71303 6090 141646 7
72480 6808 175910 7
108705 6602 213098 8
97889 7379 185516 8
184906 6405 212580 12
37242 6057 197905 8
157284 6548 162928 9
17910 6885 194180 10
70660 7162 161827 7
8593 7375 207061 8
28712 6311 176373 10
144194 7324 142715 9
73106 7196 176153 7
67065 7392 171039 7
77954 7116 161489 7
59842 7107 162637 7
101819 5994 182973 9
183546 6427 142029 12
102881 6477 188129 8
在每个月,有很多用户谁都是一样的,而且首先要按月子集,使频率表用户和取(不幸的是,所述随机样品中上面有每个用户只有一个行程,但在较大的数据集,这是不的情况下)行程的量的:
full_data <- full_data[full_data$month == 7,]
users <- as.data.frame(table(full_data$user_id))
head(users)
Var1 Freq
1 100231 10
2 100744 17
3 111281 1
4 111814 2
5 113716 3
6 117493 3
正如我们可以请在完整的数据集中查看o月份f七月(月= 7),用户已经进行了多次旅行。现在重要的部分 - 这是子集只有这些用户的前10%(前10%的Freq
方面)
tenPercent = round(nrow(users)/10)
users <- users[order(-users$Freq),]
topten <- head(users, n = tenPercent)
现在,新的数据框 - topten
- 可以总结,我们可以得到的金额用户
sum(topten$Freq)
[1] 12147
最终输出应该是这样的
> output
month trips
1 7 12147
2 8 ...
3 9 ...
4 10 ...
5 11 ...
6 12 ...
的前10%采取车次是否有办法来自动使用这一过程- 我的意思是特别是前10%的子集?我已经尝试过
output <- full_data %>%
+ group_by(month) %>%
+ summarise(n = n())
但是,这只能按月累计总次数。有人可以建议一种方法将这部分集成到dplyr
的查询中吗? :
tenPercent = round(nrow(users)/10)
users <- users[order(-users$Freq),]
topten <- head(users, n = tenPercent)
谢谢你的尝试。答案有点偏离(大约1000次左右,比预期的要少),'filter(percent_rank(n)> = 0.9)'如何工作? –