2017-07-09 9 views
0

I haben die folgenden zwei Datensätze (data1 und DATA2) und möchten basierend auf dem Spiel Variable in allen möglichen Fällen entsprechen.Daten alle Fälle, in passenden R

data1 <- data.frame(

match = c(rep("a",7),rep("b",7),rep("c",3),rep("d",2)) 

) 

data2 <- data.frame(

match = c(rep("a",4),rep("b",5),rep("c",2),rep("d",9)), 
unit1 = 
c(300,200,300,600,250,100,90,50,10,9,9.5,80,90,50,20,30,40,70,15,190) 

) 

um einen einzelnen Datensatz aus folgendem Format zu erstellen: Bemerkenswert ist auch, dass diese Datensätze so groß sind, wird eine effiziente Art und Weise zu tun, solche Anpassung benötigt.

match unit1_1 unit1_2 unit1_3 unit1_4 unit1_5 unit1_6 unit1_7 unit1_8 unit1_9 
    a 300 200 300 600     
    a 300 200 300 600     
    a 300 200 300 600     
    a 300 200 300 600     
    a 300 200 300 600     
    a 300 200 300 600     
    a 300 200 300 600     
    b 250 100 90 50 10    
    b 250 100 90 50 10    
    b 250 100 90 50 10    
    b 250 100 90 50 10    
    b 250 100 90 50 10    
    b 250 100 90 50 10    
    b 250 100 90 50 10    
    c 9 9.5       
    c 9 9.5       
    c 9 9.5       
    d 80 90 50 20 30 40 70 15 190 
    d 80 90 50 20 30 40 70 15 190 

Antwort

1

Sie können in ein paar Möglichkeiten, dies zu tun, hier ist ein data.table Funktionen:

library(data.table) 
setDT(data2) 
setDT(data1) 

eine Spalte hinzufügen, um zu Großformat Gießen und die Spaltennamen so, wie Sie sie wollen einstellen .

data2[ , record := paste0("unit1_", seq_len(.N)), by = match ] 

Konvertieren von Lang- zu Großformat.

data3 <- dcast(data2, match ~ record, value.var = "unit1", fill = NA_real_)  

nun die match Spalte verwenden, um mit Ihrem ersten data1 zu fusionieren, dass setzen

data4 <- merge(data1, data3, by = "match", all = TRUE) 

data4 

# match unit1_1 unit1_2 unit1_3 unit1_4 unit1_5 unit1_6 unit1_7 unit1_8 unit1_9 
# 1:  a  300 200.0  300  600  NA  NA  NA  NA  NA 
# 2:  a  300 200.0  300  600  NA  NA  NA  NA  NA 
# 3:  a  300 200.0  300  600  NA  NA  NA  NA  NA 
# 4:  a  300 200.0  300  600  NA  NA  NA  NA  NA 
# 5:  a  300 200.0  300  600  NA  NA  NA  NA  NA 
# 6:  a  300 200.0  300  600  NA  NA  NA  NA  NA 
# 7:  a  300 200.0  300  600  NA  NA  NA  NA  NA 
# 8:  b  250 100.0  90  50  10  NA  NA  NA  NA 
# 9:  b  250 100.0  90  50  10  NA  NA  NA  NA 
# 10:  b  250 100.0  90  50  10  NA  NA  NA  NA 
# 11:  b  250 100.0  90  50  10  NA  NA  NA  NA 
# 12:  b  250 100.0  90  50  10  NA  NA  NA  NA 
# 13:  b  250 100.0  90  50  10  NA  NA  NA  NA 
# 14:  b  250 100.0  90  50  10  NA  NA  NA  NA 
# 15:  c  9  9.5  NA  NA  NA  NA  NA  NA  NA 
# 16:  c  9  9.5  NA  NA  NA  NA  NA  NA  NA 
# 17:  c  9  9.5  NA  NA  NA  NA  NA  NA  NA 
# 18:  d  80 90.0  50  20  30  40  70  15  190 
# 19:  d  80 90.0  50  20  30  40  70  15  190 
+0

Thank you! Perfekt – sharkey32

+0

Großartig! Bitte denken Sie daran, die Antwort als "akzeptiert" zu markieren, wenn dies Ihre Frage beantwortet hat. https://stackoverflow.com/help/someone-answers – rosscova

Verwandte Themen