2017-07-25 3 views
2

Mein Ziel ist es, eine data.table zu erstellen, die die Gesamtzahl der Ereignisse pro Woche pro Künstler zeigt. Außerdem möchte ich zwei Spalten hinzufügen, die die Anzahl der Veranstaltungen und die Anzahl der Konzerte angeben, die pro Künstler in einer bestimmten Woche gegeben werden.Anzahl der wöchentlichen Ereignisse pro Künstler in R data.table

Mein data.table sieht wie folgt aus:

Year_week artist_id type event_id 
17\2  464836  Concert 54446 
17\2  4234234 Festival 6654 
17\3  89543  Concert 5321 
17\3  55211  Concert 85642 
17\4  32167  Concert 43222 
17\4  9876  Concert 13131 

ich bereits Woche für die Gesamtzahl der Ereignisse zu aggregieren versucht. Da ich jedoch relativ neu in R bin, habe ich das Gefühl, dass das, was ich tue, nicht der richtige Weg ist.

#number of events per week per artist 
USevents_weekly_total = USevents[, list(number_of_events = .N (unique(event_id))), 
             by=c('Year_week', 'artist_id')] 

Was wäre der bequemste Weg, dies in data.table zu tun?

+1

FWIW, in der Basis R würden Sie 'Länge (einzigartig (...)) verwenden' und data.table diese bequem als 'uniqueN umgesetzt hat (...)' wie in akruns gezeigt Antworten. –

Antwort

2

Unter der Annahme, dass wir finden müssen, können die Anzahl der unique Elemente in 'event_id' für 'Year_week', 'KUENSTLER_ID' und 'Künstler', die uniqueN Funktion

USevents_weekly_total <- USevents[, list(number_of_events = uniqueN(event_id)), 
            by=c('Year_week', 'artist_id', 'Artist')] 

verwendet werden oder wie @Frank

erwähnt
unique(USevents[, .(Year_week, artist_id, Artist)])[, .N, by=.(Year_week, artist_id)] 
+1

Sie haben eine zusätzliche Klammer –

+1

@Moody_Mudskipper THanks für die Abholung – akrun

+1

In meiner Erfahrung 'uniqueN (.), Durch = ...' kann langsam sein. Eine umständliche Alternative, die ich verwende, ist: 'unique (DT [,. (X, y, z)]) [, .N, durch =. (X, y)] ' – Frank