2016-07-18 6 views
0

ich ein Daten wie die folgende haben, und ich möchte den Anteil der Menschen kennen, die von mehr als 2 Marken gekauft:R: die einzigartigen Werte von kategorischen Daten durch eine andere kategorische Variable sortiert bekommen

 hh_code brand 
    3032145  536 
    3032145  53 
    3032145  534 
    324063  536 
    204128  53 
    84787   536 

und ich möchte die Anzahl der Marken, die von jedem Haushalt gekauft - wie folgt aus:

hh_code unique_ brand 
    3032145 3 
    847827  1 
    204128  1 
    84787  1 

ich habe mit Tisch versucht, aber es gibt mir nur Frequenzen. Würde mich über Einsichten freuen!

+0

Dies ist eine ziemlich häufig gestellte Frage. Sie könnten auch 'table (df $ hh_code)' verwenden, was für Ihr Beispiel funktionieren würde oder wenn HHs die gleiche Marke mehrmals kaufen, sollte 'table (unique (df) $ hh_code)' für einen dat.frame mit 2 Spalten funktionieren. – lmo

+0

ok, danke! Ich habe versucht, Tabelle (df $ hh_code, df $ Marke) vor und es hat nicht funktioniert – lll

Antwort

1

Wir data.table

library(data.table) 
setDT(df1)[, .(unique_brand = uniqueN(brand)), by = hh_code] 
# hh_code unique_brand 
#1: 3032145   3 
#2: 324063   1 
#3: 204128   1 
#4: 84787   1 
+1

Das war eine beeindruckend schnelle Antwort. – dayne

0

Einfach, Basis R-Lösung tapply verwenden:

num_brands <- tapply(df$brand, df$hh_code, length) 
ge2_brands <- num_brands > 2