Ich habe mehrere Datenrahmen in R mit genau der gleichen Struktur, und ich möchte sie vertikal in einem einzigen Datenrahmen zusammenführen. unsplit()
scheint wie eine richtige Funktion zu tun. Ich war jedoch nicht in der Lage, es zum Laufen zu bringen.Wie verwenden Sie unsplit(), um mehrere Datenrahmen vertikal zu verbinden?
Schließlich reduzierte ich alles auf diesen einfachen Fall:
> df <- data.frame("ch" = c("A", "B"), "num" = c(1, 2));
> df
ch num
1 A 1
2 B 2
> divided <- split(df, df$ch);
> divided
$A
ch num
1 A 1
$B
ch num
2 B 2
> changed <- lapply(divided, function (x) {data.frame("ch" = x$ch, "num" = x$num + 1)})
> changed
$A
ch num
1 A 2
$B
ch num
1 B 3
> unsplit(changed, df$ch)
Error in `row.names<-.data.frame`(`*tmp*`, value = value) :
duplicate 'row.names' are not allowed
In addition: Warning message:
non-unique value when setting 'row.names': ‘1’
So ist die Frage - warum in diesem Fall nicht unsplit()
hat funktioniert? Was wäre ein richtiger Weg, diese Funktion zu nutzen?
P.S. Ich bin in der Lage, meine Aufgabe zu lösen, indem ich do.call('rbind', changed)
benutze, aber diese Frage ist über korrekte Anwendung von unsplit()
.
Lesen Sie den Fehler: Sie haben doppelte Zeilennamen, die 'unsplit' zur Rekombination verwendet. Aus '? Unsplit':" Im Datenrahmenfall werden Zeilennamen erhalten, indem die Zeilennamenvektoren von den Elementen von 'value' getrennt werden." – alistaire
Danke @alistaire - Ich habe versucht, alles zu entschlüsseln, aber es ist wie in ein rekursives Kaninchen Loch gehen - unsplit() -> Elemente -> Zeilennamen -> unsplit() ... Und die Nachricht, die '* tmp * erwähnt 'Wert war auch nicht hilfreich (Ich weiß nicht, ob es eine Zeichenfolge oder ein Platzhalter in der Fehlerausgabe ist ...). Den Weg zu finden, den Fehler zu beheben und eine klare Erklärung dafür zu erhalten, welche Dateneinträge mit welchen Funktionen kollidieren, wäre großartig. –
Es lohnt sich nicht zu reparieren; 'unsplit' ist eine meist nutzlose Funktion, da ohne signifikantes Finging nur etwas Split 'Split' möglich ist. 'do.call (rbind, ...)' ist der allgemeine Weg, um eine Liste von data.frames in R zu rekombinieren, obwohl dplyr und data.table die leistungsfähigeren Alternativen 'bind_rows' und' rbindlist' haben. – alistaire