2017-01-25 5 views
1

Ich habe folgendes Beispiel Datensatz:Merge Datensätze in Datenrahmen in R

data.frame(SEX=c("M","F","M","F"),COMPLAINT=c("headache","headache", "dizziness", "dizziness"), 
      reports=c(5,4,9,12), users = c(1250,3460,2500,1850)) 

    SEX COMPLAINT reports users 
1 M headache  5 1250 
2 F headache  4 3460 
3 M dizziness  9 2500 
4 F dizziness  12 1850 

Meine Frage ist, wie Zeilen fusionieren 1 und 2 sowie 3 und 4, so daß meine Datenrahmen wie folgt sind:

COMPLAINT reports_male reports_female users_male users_female 
1 headache   5    4  1250   3460 
2 dizziness   9    12  2500   1850 

Wer hat eine schnelle Lösung, die ich für einen (viel) größeren Datensatz verwenden kann?

Antwort

3

können wir die Verwendung dcast aus data.table die value.var Spalten mehr nehmen und ist sehr effizient auf große Datensätze

library(data.table) 
dcast(setDT(df1), COMPLAINT ~ SEX, value.var = c("reports", "users")) 
# COMPLAINT reports_F reports_M users_F users_M 
#1: dizziness  12   9 1850 2500 
#2: headache   4   5 3460 1250 
2

Wie in How to reshape data from long to wide format? gesehen, können wir library(reshape2) verwenden und dann

reshape(df, idvar = "COMPLAINT", timevar = "SEX", direction = "wide").

COMPLAINT reports.M users.M reports.F users.F 
1 headache   5 1250   4 3460 
3 dizziness   9 2500  12 1850