2017-05-18 2 views
-1

Ich würde sagen, dass ich gerade angefangen habe, mit R vor einer halben Stunde zu arbeiten, R-Skripte von SQL Server ausgeführt, also bin ich, was sie ein komplettes noob nennen .Verschmelzen Sie 2 Vektoren mit verschiedenen Längen in einen Datenrahmen

Ich versuche, zwei R-Vektoren in einen Datenrahmen zu verschmelzen, aber mein Problem ist, dass die Vektoren unterschiedliche Längen haben.

Ich bin mir nicht sicher, ob dies getan werden kann, obwohl ich nicht unbedingt sehe warum nicht?

Mein R Skript ist:

n <- c(2, 3, 5, 6); 
s = c("aa", "bb", "cc"); 
df = data.frame(n, s); 

Und die Fehler, die ich habe, ist immer:

Fehler in data.frame (n, s): Argumente implizieren unterschiedliche Anzahl von Reihen : 4, 3 Aufrufe: source -> mitVisible -> eval -> eval -> dat.frame

Fehler in ScaleR. Überprüfen Sie die Ausgabe für weitere Informationen. Fehler in eval (expr, envir, enclos): Fehler in ScaleR. Überprüfen Sie den Ausgang für weitere Informationen. Anrufe: Quelle -> withVisible -> eval -> eval -> .Call Ausführung gestoppt

esentially, was ich mir vor, dabei ein Ergebnis erzeugt gesetzt ähnlich einem LEFT JOIN.

2 aa 
3 bb 
5 cc 
6 NULL 

Ich frage mich, ob ich einen „ersetzen NULL“ Werte in dem R-Datenrahmen festlegen sollte, aber ich bin mir nicht sicher, ob dies eine Lösung ist.

+1

Sie können dort nicht haben 'NULL', sondern' NA' (für fehlende): 'L = Liste (n = n, s = s); data.frame (lapply (L, \ 'Länge <- \ ', max (Länge (L)))). Ich denke, es gibt ein paar Betrüger dafür. – Frank

+0

was du bezeichnest, ist nicht "merging". Um zu "fusionieren" benötigen Sie einen Schlüssel. Es ist nicht möglich, Listen unterschiedlicher Länge zu einem data.frame in R zu kombinieren. Sie müssen die gleiche Länge haben, um sie zu kombinieren. Wie willst du sie kombinieren? – DJJ

+0

@DJJ Ich schaute online, um zu sehen, ob ein R-Datenframe einen impliziten Schlüssel für jede Zeile generiert hat, so dass ich sie 'JOIN' oder zuordnen kann, aber ich konnte (noch) nichts finden. –

Antwort

1

Dieses vielleicht:

sq <- seq(max(length(n), length(s))) 
data.frame(n[sq], s[sq]) 

# n.sq. s.sq. 
#1  2 aa 
#2  3 bb 
#3  5 cc 
#4  6 <NA> 
+1

Ich mag dies! Danke vielmals! –

Verwandte Themen