Wie fügt man in R einem Datenrahmen eine neue Zeile hinzu, nachdem der Datenrahmen bereits initialisiert wurde?
Bisher habe ich Folgendes:
df <- data.frame("hi", "bye")
names(df) <- c("hello", "goodbye")
#I am trying to add "hola" and "ciao" as a new row
de <- data.frame("hola", "ciao")
merge(df, de) # Adds to the same row as new columns
# Unfortunately, I couldn't find an rbind() solution that wouldn't give me an error
Jede Hilfe wäre dankbar
de
zu.names(de) <- c("hello","goodbye")
undrbind
rbind(df, setNames(de, names(df)))
rbind(data.frame(a = 1), data.frame(b = 2))
.. warum willst du das? Ich würde hoffen, dass das trotzdem einen Fehler auslösen würde. Es ist wiemerge
mit einer Zufallsvariablenby
. Und das ist 2015, nicht alleoptions(stringsAsFactors = FALSE)
?stringsAsFactors=FALSE
kann eine schnelle Lösung sein, aber das Ändern der Standardeinstellungen, die andere Leute anders eingestellt haben, kann einen Tag wirklich ruinieren.Antworten:
Wie @Khashaa und @Richard Scriven in Kommentaren hervorheben, müssen Sie für alle Datenrahmen, die Sie anhängen möchten, konsistente Spaltennamen festlegen.
Daher müssen Sie die Spaltennamen für den zweiten Datenrahmen explizit deklarieren
de
und dann verwendenrbind()
. Sie legen nur Spaltennamen für den ersten Datenrahmen festdf
:quelle
newdf<-rbind(df, data.frame(hello="hola", goodbye="ciao"))
ODER mit Variable:newdf<-rbind(df, data.frame(hello=var1, goodbye=var2))
Machen wir es einfach:
quelle
df[nrow(df) + 1, 1:2] = c("v1", "v2")
unddf[nrow(df), 3] = 100
dennoch ist es ein guter Punkt, eine neue Zeile hinzuzufügen. Also, +1list()
. Ich habe Ihre Bearbeitung zurückgesetzt.Oder, inspiriert von @MatheusAraujo:
df[nrow(df) + 1,] = list("v1","v2")
Dies würde gemischte Datentypen ermöglichen.
quelle
Es gibt jetzt
add_row()
aus dentibble
odertidyverse
Paketen.Nicht spezifizierte Spalten erhalten eine
NA
.quelle
rbind
undas.matrix
darunterIch mag
list
statt,c
weil es gemischte Datentypen besser handhabt. Hinzufügen einer zusätzlichen Spalte zur Frage des Originalplakats:Beachten Sie, dass eine zusätzliche Steuerung erforderlich ist, wenn die Zeichenfolge / Faktor-Konvertierung wichtig ist.
Oder verwenden Sie die ursprünglichen Variablen mit der Lösung von MatheusAraujo / Ytsen de Boer:
Beachten Sie, dass diese Lösung mit den Zeichenfolgen nur dann gut funktioniert, wenn Daten im Datenrahmen vorhanden sind.
quelle
hello
undgoodbye
im Zeichen in sinddf
, können Sie Folgendes tun. Sie verwenden nicht unbedingt Namen in einer Liste.df <- data.frame(hello = "hi", goodbye = "bye", volume = 1,stringsAsFactors = FALSE); rbind(df, list("hola", "ciao", 100))
.Nicht besonders elegant, aber:
Aus der Dokumentation der
rbind
Funktion:quelle
Ich muss
stringsAsFactors=FALSE
beim Erstellen des Datenrahmens hinzufügen..
quelle
stringsAsFactors=FALSE
Stellen Sie sicher, dass Sie beim Erstellen des Datenrahmens Folgendes angeben:Wenn Sie
stringsAsFactors=FALSE
den Datenrahmen nicht erstellen, wird beim Versuch, die neue Zeile hinzuzufügen, der folgende Fehler angezeigt:quelle
Es gibt eine einfachere Möglichkeit, einen Datensatz von einem Datenrahmen an einen anderen anzuhängen, wenn Sie wissen, dass die beiden Datenrahmen dieselben Spalten und Typen verwenden. Anhängen eine Zeile aus
xx
zuyy
nur folgendes tun , woi
diei
‚ten Zeile inxx
.So einfach ist das. Keine unordentlichen Bindungen. Wenn Sie alle anhängen müssen
xx
anyy
, dann rufen Sie entweder eine Schleife oder nutzen Sequenz Fähigkeiten des R und dies tun:quelle
Wenn Sie einen leeren Datenrahmen erstellen und Inhalte in einer Schleife hinzufügen möchten, kann Folgendes hilfreich sein:
Ich hoffe es hilft :)
quelle