In diesem Tutorial werden wir einen der häufigsten Vorgänge betrachten, die zum Manipulieren von Datenrahmen in R: So fügen Sie eine Spalte zu einem Datenrahmen in der Foundation R. hinzu.
Ein Datenrahmen ist eine der grundlegenden Datenstrukturen der R -Programmiersprache. Es handelt sich auch um eine sehr vielseitige Datenstruktur, da sie mehrere Datentypen speichern, leicht geändert und einfach aktualisiert werden kann.
Was ist ein Datenrahmen in R?
Technisch gesehen ist ein Datenrahmen in R ein spezifischer Fall von eine Liste der Vektoren derselben Längewo verschiedene Vektoren unterschiedlicher Datentypen sein können (und sind es normalerweise). Da ein Datenrahmen eine tabellarische, zweidimensionale Kind hat, hat er Spalten (Variablen) und Zeilen (Dateneinträge). Wenn Sie neu zum Erstellen von Datenfrüchten in R. sind, möchten Sie möglicherweise lesen So erstellen Sie einen Datenrahmen in R. Bevor Sie diesen Beitrag fortsetzen.
Hinzufügen einer Spalte zu einem Datenrahmen in r
Möglicherweise möchten wir aus verschiedenen Gründen eine neue Spalte zu einem R -Datenrahmen hinzufügen: Berechnung einer neuen Variablen basierend auf den vorhandenen, um eine neue Spalte hinzuzufügen, basierend auf der verfügbaren, jedoch mit einem anderen Format (auf diese Weise auf diese Weise aufbewahrt), um eine leere oder Platzhalterspalte zum weiteren Ausfüllen hinzuzufügen, um eine Spalte hinzuzufügen, die vollständig neue Informationen enthält.
Lassen Sie uns verschiedene Möglichkeiten zum Hinzufügen einer neuen Spalte zu einem Datenrahmen in R in R. Für unsere Experimente verwenden wir hauptsächlich denselben Datenrahmen auf dem Namen super_sleepers Das werden wir jedes Mal aus dem folgenden anfänglichen Datenframe rekonstruieren:
super_sleepers_initial <- knowledge.body(ranking=1:4,
animal=c('koala', 'hedgehog', 'sloth', 'panda'),
nation=c('Australia', 'Italy', 'Peru', 'China'))
print(super_sleepers_initial)
Output:
ranking animal nation
1 1 koala Australia
2 2 hedgehog Italy
3 3 sloth Peru
4 4 panda China
Unsere Aufgabe wird es sein, zu diesem Datenfrequenz eine neue Spalte mit dem Titel hinzuzufügen avg_sleep_hours Laut dem folgenden Schema die durchschnittliche Zeit in Stunden, die jedes der oben genannten Tiere professional Tag schläft:
| Tier | AVG -HRS des Schlafes professional Tag |
|---|---|
| Koala | 21 |
| Igel | 18 |
| Faultier | 17 |
| Panda | 10 |
Für einige Beispiele experimentieren wir mit dem Hinzufügen von zwei weiteren Spalten: avg_sleep_hours_per_year Und has_tail.
Lassen Sie uns nun eintauchen.
Hinzufügen einer Spalte zu einem Datenrahmen in R mit dem $ -Image hinzufügen
Da ein Datenrahmen in R eine Liste von Vektoren ist, in denen jeder Vektor eine einzelne Spalte dieses Datenrahmens darstellt, können wir einem Datenrahmen eine Spalte hinzufügen, indem wir diese „Liste“ nur den entsprechenden neuen Vektor hinzufügen. Die Syntax ist wie folgt:
dataframe_name$new_column_name <- vector
Lassen Sie uns unsere rekonstruieren super_sleepers Datenrahmen von der Anfangs super_sleepers_initial DataFrame (wir werden dies für jedes nachfolgende Experiment tun) und fügen Sie eine Spalte mit dem Namen hinzu avg_sleep_hours durch den Vektor vertreten c(21, 18, 17, 10):
# Reconstructing the `super_sleepers` dataframe
super_sleepers <- super_sleepers_initial
print(super_sleepers)
cat('nn') # printing an empty line
# Including a brand new column `avg_sleep_hours` to the `super_sleepers` dataframe
super_sleepers$avg_sleep_hours <- c(21, 18, 17, 10)
print(super_sleepers)
Output:
ranking animal nation
1 1 koala Australia
2 2 hedgehog Italy
3 3 sloth Peru
4 4 panda China
ranking animal nation avg_sleep_hours
1 1 koala Australia 21
2 2 hedgehog Italy 18
3 3 sloth Peru 17
4 4 panda China 10
Beachten Sie, dass die Anzahl der im Vektor hinzugefügten Elemente gleich der aktuellen Anzahl der Zeilen in einem Datenrahmen sein muss. Andernfalls wirft das Programm einen Fehler aus:
# Reconstructing the `super_sleepers` dataframe
super_sleepers <- super_sleepers_initial
print(super_sleepers)
cat('nn')
# Making an attempt so as to add a brand new column `avg_sleep_hours` to the `super_sleepers` dataframe
# with the variety of objects within the vector NOT EQUAL to the variety of rows within the dataframe
super_sleepers$avg_sleep_hours <- c(21, 18, 17)
print(super_sleepers)
Output:
ranking animal nation
1 1 koala Australia
2 2 hedgehog Italy
3 3 sloth Peru
4 4 panda China
Error in $<-.knowledge.body(*tmp*, avg_sleep_hours, worth = c(21, 18, 17): substitute has 3 rows, knowledge has 4
Traceback:
1. <-(*tmp*, avg_sleep_hours, worth = c(21, 18, 17))
2. <-.knowledge.body(*tmp*, avg_sleep_hours, worth = c(21, 18, 17))
3. cease(sprintf(ngettext(N, "substitute has %d row, knowledge has %d",
. "substitute has %d rows, knowledge has %d"), N, nrows), area = NA)
Anstatt einen Vektor zuzuweisen, können wir für alle Zeilen einer neuen Spalte einen einzelnen Wert, ob numerisch oder Zeichen, zuweisen:
# Reconstructing the `super_sleepers` dataframe
super_sleepers <- super_sleepers_initial
print(super_sleepers)
cat('nn')
# Including a brand new column `avg_sleep_hours` to the `super_sleepers` dataframe and setting it to 0
super_sleepers$avg_sleep_hours <- 0
print(super_sleepers)
Output:
ranking animal nation
1 1 koala Australia
2 2 hedgehog Italy
3 3 sloth Peru
4 4 panda China
ranking animal nation avg_sleep_hours
1 1 koala Australia 0
2 2 hedgehog Italy 0
3 3 sloth Peru 0
4 4 panda China 0
In diesem Fall spielt die neue Spalte eine Rolle eines Platzhalters für die realen Werte des angegebenen Datentyps (im obigen Fall numerisch), den wir später einfügen können.
Alternativ können wir eine neue Spalte basierend auf den vorhandenen berechnen. Fügen wir zuerst die Spalte avg_sleeep_hours zu unserem Datenrahmen hinzu und berechnen Sie dann eine neue Spalte avg_sleep_hours_per_year daraus. Wir möchten wissen, wie viele Stunden diese Tiere im Durchschnitt professional Jahr schlafen:
# Reconstructing the `super_sleepers` dataframe
super_sleepers <- super_sleepers_initial
print(super_sleepers)
cat('nn')
# Including a brand new column `avg_sleep_hours` to the `super_sleepers` dataframe
super_sleepers$avg_sleep_hours <- c(21, 18, 17, 10)
print(super_sleepers)
cat('nn')
# Including a brand new column `avg_sleep_hours_per_year` calculated from `avg_sleep_hours`
super_sleepers$avg_sleep_hours_per_year <- super_sleepers$avg_sleep_hours * 365
print(super_sleepers)
Output:
ranking animal nation
1 1 koala Australia
2 2 hedgehog Italy
3 3 sloth Peru
4 4 panda China
ranking animal nation avg_sleep_hours
1 1 koala Australia 21
2 2 hedgehog Italy 18
3 3 sloth Peru 17
4 4 panda China 10
ranking animal nation avg_sleep_hours avg_sleep_hours_per_year
1 1 koala Australia 21 7665
2 2 hedgehog Italy 18 6570
3 3 sloth Peru 17 6205
4 4 panda China 10 3650
Außerdem ist es möglich, eine Spalte von einem Datenrahmen auf einen anderen mit der folgenden Syntax zu kopieren:
df1$new_col <- df2$existing_col
Lassen Sie uns eine solche State of affairs replizieren:
# Creating the `super_sleepers_1` dataframe with the one column ranking
super_sleepers_1 <- knowledge.body(ranking=1:4)
print(super_sleepers_1)
cat('nn')
# Copying the `animal` column from `super_sleepers_initial` to `super_sleepers_1`
# Be aware that within the new dataframe, the column known as `ANIMAL` as a substitute of `animal`
super_sleepers_1$ANIMAL <- super_sleepers_initial$animal
print(super_sleepers_1)
Output:
ranking
1 1
2 2
3 3
4 4
ranking ANIMAL
1 1 koala
2 2 hedgehog
3 3 sloth
4 4 panda
Der Nachteil dieses Ansatzes (dh den $ Operator zum Anhängen einer Spalte an einen Datenrahmen) besteht darin, dass wir auf diese Weise keine Spalte hinzufügen können, deren Title weiße Räume oder spezielle Symbole enthält. In der Tat kann es nichts enthalten, was kein Buchstaben (Ober- oder Kleinbuchstaben), eine Zahl, ein Punkt oder ein Unterstrich ist. Dieser Ansatz eignet sich auch nicht zum Hinzufügen mehrerer Spalten.
Hinzufügen einer Spalte zu einem Datenrahmen in R mit quadratischen Klammern Hinzufügen
Eine andere Möglichkeit, eine neue Spalte zu einem R-Datenrahmen hinzuzufügen, ist eher „DataFrame-Stil“ als „Listenstil“: Mithilfe einer Klammernotation. Mal sehen, wie es funktioniert:
# Reconstructing the `super_sleepers` dataframe
super_sleepers <- super_sleepers_initial
print(super_sleepers)
cat('nn')
# Including a brand new `column avg_sleep_hours` to the `super_sleepers` dataframe:
super_sleepers('avg_sleep_hours') <- c(21, 18, 17, 10)
print(super_sleepers)
Output:
ranking animal nation
1 1 koala Australia
2 2 hedgehog Italy
3 3 sloth Peru
4 4 panda China
ranking animal nation avg_sleep_hours
1 1 koala Australia 21
2 2 hedgehog Italy 18
3 3 sloth Peru 17
4 4 panda China 10
Im obigen Code können wir diese Zeile ersetzen:
super_sleepers('avg_sleep_hours') <- c(21, 18, 17, 10)
Diese Linie kann auch ersetzt werden:
super_sleepers(('avg_sleep_hours')) <- c(21, 18, 17, 10)
Schließlich kann dieser auch ersetzt werden:
super_sleepers('avg_sleep_hours') <- c(21, 18, 17, 10)
Das Ergebnis ist identisch, das sind nur 3 verschiedene Versionen der Syntax.
Wie für die vorherige Methode können wir der neuen Spalte einen einzelnen Wert anstelle eines Vektors zuweisen:
# Reconstructing the `super_sleepers` dataframe
super_sleepers <- super_sleepers_initial
print(super_sleepers)
cat('nn')
# Including a brand new column `avg_sleep_hours` to the `super_sleepers` dataframe and assigning it to 'Unknown'
super_sleepers('avg_sleep_hours') <- 'Unknown'
print(super_sleepers)
Output:
ranking animal nation
1 1 koala Australia
2 2 hedgehog Italy
3 3 sloth Peru
4 4 panda China
ranking animal nation avg_sleep_hours
1 1 koala Australia Unknown
2 2 hedgehog Italy Unknown
3 3 sloth Peru Unknown
4 4 panda China Unknown
Various können wir eine neue Spalte basierend auf den vorhandenen berechnen:
# Reconstructing the `super_sleepers` dataframe
super_sleepers <- super_sleepers_initial
print(super_sleepers)
cat('nn')
# Including a brand new column `avg_sleep_hours` to the `super_sleepers` dataframe
super_sleepers('avg_sleep_hours') <- c(21, 18, 17, 10)
print(super_sleepers)
cat('nn')
# Including a brand new column `avg_sleep_hours_per_year` calculated from `avg_sleep_hours`
super_sleepers('avg_sleep_hours_per_year') <- super_sleepers('avg_sleep_hours') * 365
print(super_sleepers)
Output:
ranking animal nation
1 1 koala Australia
2 2 hedgehog Italy
3 3 sloth Peru
4 4 panda China
ranking animal nation avg_sleep_hours
1 1 koala Australia 21
2 2 hedgehog Italy 18
3 3 sloth Peru 17
4 4 panda China 10
ranking animal nation avg_sleep_hours avg_sleep_hours_per_year
1 1 koala Australia 21 7665
2 2 hedgehog Italy 18 6570
3 3 sloth Peru 17 6205
4 4 panda China 10 3650
Verwenden einer anderen Choice können wir eine Spalte aus einem anderen Datenrahmen kopieren:
# Creating the `super_sleepers_1` dataframe with the one column `ranking`
super_sleepers_1 <- knowledge.body(ranking=1:4)
print(super_sleepers_1)
cat('nn')
# Copying the `animal` column from `super_sleepers_initial` to `super_sleepers_1`
# Be aware that within the new dataframe, the column known as `ANIMAL` as a substitute of `animal`
super_sleepers_1('ANIMAL') <- super_sleepers_initial('animal')
print(super_sleepers_1)
Output:
ranking
1 1
2 2
3 3
4 4
ranking ANIMAL
1 1 koala
2 2 hedgehog
3 3 sloth
4 4 panda
Der Vorteil der Verwendung von Quadratklammern gegenüber dem $ Operator zum Anhängen einer Spalte an einen Datenrahmen besteht darin, dass wir eine Spalte hinzufügen können, deren Title weiße Räume oder spezielle Symbole enthält.
Hinzufügen einer Spalte zu einem Datenrahmen in R mit der cbind() Funktion
Die dritte Möglichkeit zum Hinzufügen einer neuen Spalte zu einem R -Datenframe ist die Anwendung der cbind() Funktion, die für „Spaltenbindungen“ steht und auch zur Kombination von zwei oder mehr Datenrahmen verwendet werden kann. Die Verwendung dieser Funktion ist ein universellerer Ansatz als die beiden vorherigen, da das Hinzufügen mehrerer Spalten gleichzeitig hinzugefügt wird. Die grundlegende Syntax ist wie folgt:
df <- cbind(df, new_col_1, new_col_2, ..., new_col_N)
Das folgende Stück Code fügt die hinzu avg_sleep_hours Spalte zur super_sleepers Datenrahmen:
# Reconstructing the `super_sleepers` dataframe
super_sleepers <- super_sleepers_initial
print(super_sleepers)
cat('nn')
# Including a brand new column `avg_sleep_hours` to the `super_sleepers` dataframe
super_sleepers <- cbind(super_sleepers,
avg_sleep_hours=c(21, 18, 17, 10))
print(super_sleepers)
Output:
ranking animal nation
1 1 koala Australia
2 2 hedgehog Italy
3 3 sloth Peru
4 4 panda China
ranking animal nation avg_sleep_hours
1 1 koala Australia 21
2 2 hedgehog Italy 18
3 3 sloth Peru 17
4 4 panda China 10
Das nächste Stück Code fügt zwei neue Spalten hinzu – avg_sleep_hours Und has_tail – an die super_sleepers Datenrahmen gleichzeitig:
# Reconstructing the `super_sleepers` dataframe
super_sleepers <- super_sleepers_initial
print(super_sleepers)
cat(nn)
# Including two new columns `avg_sleep_hours` and `has_tail` to the `super_sleepers` dataframe
super_sleepers <- cbind(super_sleepers,
avg_sleep_hours=c(21, 18, 17, 10),
has_tail=c('no', 'sure', 'sure', 'sure'))
print(super_sleepers)
Output:
ranking animal nation
1 1 koala Australia
2 2 hedgehog Italy
3 3 sloth Peru
4 4 panda China
ranking animal nation avg_sleep_hours has_tail
1 1 koala Australia 21 no
2 2 hedgehog Italy 18 sure
3 3 sloth Peru 17 sure
4 4 panda China 10 sure
Neben dem Hinzufügen mehrerer Spalten gleichzeitig, ein weiterer Vorteil der Verwendung der Verwendung der Verwendung cbind() Die Funktion ermöglicht es, das Ergebnis dieses Vorgangs zuzuweisen (dh ein oder mehrere Spalten zu einem R -Datenrahmen) zu einem neuen Datenrahmen zuzuweisen, wobei der Anfang unverändert:
# Reconstructing the `super_sleepers` dataframe
super_sleepers <- super_sleepers_initial
print(super_sleepers)
cat('nn')
# Creating a brand new dataframe `super_sleepers_new` primarily based on `super_sleepers` with a brand new column `avg_sleep_hours`
super_sleepers_new <- cbind(super_sleepers,
avg_sleep_hours=c(21, 18, 17, 10),
has_tail=c('no', 'sure', 'sure', 'sure'))
print(super_sleepers_new)
cat('nn')
print(super_sleepers)
Output:
ranking animal nation
1 1 koala Australia
2 2 hedgehog Italy
3 3 sloth Peru
4 4 panda China
ranking animal nation avg_sleep_hours has_tail
1 1 koala Australia 21 no
2 2 hedgehog Italy 18 sure
3 3 sloth Peru 17 sure
4 4 panda China 10 sure
ranking animal nation
1 1 koala Australia
2 2 hedgehog Italy
3 3 sloth Peru
4 4 panda China
Wie für die beiden vorherigen Ansätze, innerhalb der cbind() Funktion können wir der gesamten neuen Spalte einen einzelnen Wert zuweisen:
# Reconstructing the `super_sleepers` dataframe
super_sleepers <- super_sleepers_initial
print(super_sleepers)
cat('nn')
# Including a brand new column `avg_sleep_hours` to the `super_sleepers` dataframe and setting it to 0.999
super_sleepers <- cbind(super_sleepers,
avg_sleep_hours=0.999)
print(super_sleepers)
Output:
ranking animal nation
1 1 koala Australia
2 2 hedgehog Italy
3 3 sloth Peru
4 4 panda China
ranking animal nation avg_sleep_hours
1 1 koala Australia 0.999
2 2 hedgehog Italy 0.999
3 3 sloth Peru 0.999
4 4 panda China 0.999
Eine andere Choice ermöglicht es uns, es basierend auf den vorhandenen Spalten zu berechnen:
# Reconstructing the `super_sleepers` dataframe
super_sleepers <- super_sleepers_initial
print(super_sleepers)
cat('nn')
# Including a brand new column `avg_sleep_hours` to the `super_sleepers` dataframe
super_sleepers <- cbind(super_sleepers,
avg_sleep_hours=c(21, 18, 17, 10))
print(super_sleepers)
cat('nn')
# Including a brand new column `avg_sleep_hours_per_year` calculated from `avg_sleep_hours`
super_sleepers <- cbind(super_sleepers,
avg_sleep_hours_per_year=super_sleepers('avg_sleep_hours') * 365)
print(super_sleepers)
Output:
ranking animal nation
1 1 koala Australia
2 2 hedgehog Italy
3 3 sloth Peru
4 4 panda China
ranking animal nation avg_sleep_hours
1 1 koala Australia 21
2 2 hedgehog Italy 18
3 3 sloth Peru 17
4 4 panda China 10
ranking animal nation avg_sleep_hours avg_sleep_hours
1 1 koala Australia 21 7665
2 2 hedgehog Italy 18 6570
3 3 sloth Peru 17 6205
4 4 panda China 10 3650
Mit der folgenden Choice können wir eine Spalte aus einem anderen Datenrahmen kopieren:
# Creating the `super_sleepers_1` dataframe with the one column `ranking`
super_sleepers_1 <- knowledge.body(ranking=1:4)
print(super_sleepers_1)
cat('nn')
# Copying the `animal` column from `super_sleepers_initia`l to `super_sleepers_1`
# Be aware that within the new dataframe, the column continues to be known as `animal` regardless of setting the brand new title `ANIMAL`
super_sleepers_1 <- cbind(super_sleepers_1,
ANIMAL=super_sleepers_initial('animal'))
print(super_sleepers_1)
Output:
ranking
1 1
2 2
3 3
4 4
ranking animal
1 1 koala
2 2 hedgehog
3 3 sloth
4 4 panda
JedochAchten Sie im Gegensatz zu den Ansätzen von $ Operator und Sq. Bracket hier auf die folgenden zwei Nuancen:
- Wir können keine neue Spalte erstellen und eine weitere Spalte basierend auf dem neuen berechnen im gleichen
cbind()Funktion. Zum Beispiel wird der folgende Stück Code einen Fehler werfen.
# Reconstructing the `super_sleepers` dataframe
super_sleepers <- super_sleepers_initial
print(super_sleepers)
cat('nn')
# Making an attempt so as to add a brand new column `avg_sleep_hours` to the `super_sleepers` dataframe
# AND one other new column `avg_sleep_hours_per_year` primarily based on it
super_sleepers <- cbind(super_sleepers,
avg_sleep_hours=c(21, 18, 17, 10),
avg_sleep_hours_per_year=super_sleepers('avg_sleep_hours') * 365)
print(super_sleepers)
Output:
ranking animal nation
1 1 koala Australia
2 2 hedgehog Italy
3 3 sloth Peru
4 4 panda China
Error in <code>(.knowledge.body</code>(super_sleepers, "avg_sleep_hours"): undefined columns chosen
Traceback:
1. cbind(super_sleepers, avg_sleep_hours = c(21, 18, 17, 10), avg_sleep_hours_per_year = super_sleepers("avg_sleep_hours") *
. 365)
2. super_sleepers("avg_sleep_hours")
3. <code>(.knowledge.body</code>(super_sleepers, "avg_sleep_hours")
4. cease("undefined columns chosen")
- Wenn wir eine Spalte aus einem anderen Datenrahmen kopieren und versuchen, ihm einen neuen Namen zu geben in der
cbind()FunktionDieser neue Title wird ignoriert und die neue Spalte wird genau so genannt, wie sie im Originaldatenrahmen genannt wurde. Zum Beispiel im folgenden Code -Stück des neuen NamensANIMALwurde ignoriert und die neue Kolumne wurde genanntanimalgenauso wie im Datenrahmen, von dem es kopiert wurde:
# Creating the `super_sleepers_1` dataframe with the one column `ranking`
super_sleepers_1 <- knowledge.body(ranking=1:4)
print(super_sleepers_1)
cat('nn')
# Copying the `animal` column from `super_sleepers_initial` to `super_sleepers_1`
# Be aware that within the new dataframe, the column continues to be known as `animal` regardless of setting the brand new title `ANIMAL`
super_sleepers_1 <- cbind(super_sleepers_1,
ANIMAL=super_sleepers_initial('animal'))
print(super_sleepers_1)
Output:
ranking
1 1
2 2
3 3
4 4
ranking animal
1 1 koala
2 2 hedgehog
3 3 sloth
4 4 panda
Abschluss
In diesem Tutorial haben wir die verschiedenen Gründe besprochen, warum wir möglicherweise eine neue Spalte zu einem R -Datenrahmen hinzufügen müssen und welche Artwork von Informationen sie speichern können. Dann haben wir die drei verschiedenen Möglichkeiten untersucht: Verwenden der $ image, quadratische Klammern und die cbind() Funktion. Wir haben die Syntax jeder dieser Ansätze und ihre möglichen Variationen, die Vor- und Nachteile jeder Methode, mögliche zusätzliche Funktionen, die häufigsten Fallstricke und Fehler und die Vermeidung von ihnen. Außerdem haben wir gelernt, wie man einen R -Datenframe gleichzeitig mehrere Spalten hinzufügt.
Es ist erwähnenswert, dass die diskutierten Ansätze nicht die einzigen Möglichkeiten sind, eine Spalte zu einem Datenrahmen in R hinzuzufügen. Zum Beispiel können wir zum gleichen Zweck die verwenden mutate() oder add_column() Funktionen. Um diese Funktionen anzuwenden, müssen wir jedoch bestimmte R -Pakete installieren und laden ((DPLE Und Tibblejeweils) ohne sie zusätzliche Funktionen zum Interesse zu erweitern als die, die wir in diesem Tutorial diskutiert haben. Stattdessen verwenden Sie die $ image, quadratische Klammern und die cbind() Die Funktion erfordert keine Set up in der Foundation R.
Wenn Sie mehr über die Arbeit mit DataFrames in R erfahren möchten, schauen Sie sich an So fügen Sie Zeilen an einen Datenrahmen in R an (mit 7 Code -Beispielen)
