2016-05-05 16 views
0

Ich versuche, einen Stata-Code auf R zu kodieren und ich finde nicht das Äquivalent von joinby() auf R. joinby() kombiniert 2 Datensätze horizontal aber bilden alle paarweisen Kombinationen innerhalb der Gruppe.Äquivalent von Stata joinby() auf R?

Ich habe zwei Datenrahmen: eines von 100 Krankenhäusern und das andere von 10.000 GPs. Ich müsste alle Hausärzte an jedes Krankenhaus anpassen - ich würde nach der Kombination in meinem resultierenden Datenfeld 100 * 10.000 = 1.000.000 Zeilen haben.

Irgendwelche Vorschläge?

+2

'expand.grid' oder' data.table :: CJ' – eddi

Antwort

1

Es mag eine prägnantere Methode geben, aber das Folgende sollte funktionieren, sagen Sie Ihr Krankenhaus data.frame, hospDf, ist einzigartig von Krankenhaus, wie Sie Arzt docDf ist. Sie expand.grid können Sie eine data.frame aller Krankenhausarzt Kombinationen erhalten:

hospDocDf <- expand.grid(hospDf$hospID, docDf$docID) 

verschmelzen dann beide data.frames auf diese:

hospDocDf <- merge(hospDocDf, hospDf, by="hospID", all.x=TRUE) 
hospDocDf <- merge(hospDocDf, DocDf, by="docID", all.x=TRUE) 

Die all.x = TRUE Argument nicht notwendig, aber es tut nichts weh.

1

Verwenden Sie die Kreuz Join Merge, die im Wesentlichen eine Zusammenführung ohne by Argument ist. Dadurch wird das kartesische Produkt zurückgeben zwischen den beiden Sets 100 X 10000:

df <- merge(hospitaldata, gpsdata) 
+0

neugierig Antwort, aber sehr langsam im Vergleich zu 'expand.grid' – eddi

+0

Works für meine Bedürfnisse! OP kann in beiden Datasets einen Schlüssel gleichen Wertes 'hospitaldata $ key <- 1' definieren und den Schlüssel in' by' Argument verwenden. – Parfait

Verwandte Themen