Ich habe einen Datensatz mit einer Million Datensätze, die ich nach der ersten Unterteilung der Daten aggregieren muss. Es ist schwierig, eine gut reproduzierbare Probe zu liefern, weil in diesem Fall die Stichprobengröße ziemlich groß wäre - aber ich werde es trotzdem versuchen.Aggregation nach Teilmengen in dplyr
Eine Stichprobe der Daten, die ich mit wie folgt aussieht arbeite:
> 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
In jedem Monat gibt viele Anwender, die die gleichen sind, und wir sollten zuerst von Monat Teilmenge und eine Frequenztabelle machen des Benutzers und die Menge an Reisen genommen (leider in der Stichprobe, oben gibt es nur eine Fahrt pro Benutzer ist, sondern in der größeren Datenmenge, das ist nicht der Fall ist):
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
wie wir können Sehen Sie im vollen Datensatz im Monat o Im Juli (Monat = 7) haben Benutzer mehrere Reisen unternommen. Nun ist die wichtige Rolle - die nur die oberen 10% dieser Nutzer (die oberen 10% in Bezug auf Freq
)
tenPercent = round(nrow(users)/10)
users <- users[order(-users$Freq),]
topten <- head(users, n = tenPercent)
Jetzt ist die neue Datenrahmen der Teilmenge ist - topten
- summiert werden können, und wir bekommen die Menge an durch die besten zehn Prozent der Nutzer Reise genommen
sum(topten$Freq)
[1] 12147
Am Ende wie dies die Ausgabe
> output
month trips
1 7 12147
2 8 ...
3 9 ...
4 10 ...
5 11 ...
6 12 ...
gibt es eine Möglichkeit, diesen Prozess zu automatisieren mit 012.345 aussehen soll- Ich meine speziell die Untermenge von den Top Ten Prozent? Ich habe versucht
output <- full_data %>%
+ group_by(month) %>%
+ summarise(n = n())
Aber dies aggregiert nur die Gesamtzahl der Reisen nach Monat. Könnte jemand vorschlagen, diesen Teil in die Abfrage in dplyr
zu integrieren? :
tenPercent = round(nrow(users)/10)
users <- users[order(-users$Freq),]
topten <- head(users, n = tenPercent)
Danke für den Versuch. Die Antworten sind ein wenig aus (ungefähr 1000 Reisen oder so weniger als erwartet), wie funktioniert 'filter (percent_rank (n)> = 0.9)'? –