In R kann man beliebige Teile eines Datensatzes – einzelne Zeilen, Spalten und Zellen, aber auch Gruppen und Kombinationen dieser – auswählen und anzeigen, aber auch in verschiedener Weise ändern.
Auf die einzelnen Spalten eines Datensatzes kann man in verschiedener
Weise zugreifen. Wenn die Spalten Namen in der Kopfzeile haben, kann
man den $-Operator verwenden (wie
wir hier schon gesehen
haben) oder auch die Funktion with()
, die (eine Variable
für) einen Datensatz als erstes Argument hat und als zweites Argument
einen Spaltennamen des Datensatzes oder eine Funktion, die diesen
Spaltennamen als Argument nimmt:
> head(hund.kk.df$Datum)
> with(hund.kk.df, head(Datum))[1] "1900-01-03" "1900-03-20" "1900-05-22" "1900-12-24" "1900-12-24"
[6] "1900-12-31"
> tail(hund.kk.df$Datum)
> with(hund.kk.df, tail(Datum))
[1] "1904-03-03" "1904-03-04" "1904-03-04" "1904-03-04" "1904-03-04"
[6] "1904-03-04"
> length(hund.kk.df$Datum)
> with(hund.kk.df, length(Datum))
[1] 100
with()
-Funktion werden die
Spalten als Vektoren behandelt, wie man an der Ausgabe erkennt,
deswegen kann man auch Funktionen wie length()
, die einen
Vektor als Argument nehmen, auf sie anwenden. N.B.: In solchen Fällen
behandelt R den Spaltennamen wie eine Variable, daher darf er hier
nicht in Anführungsstrichen stehen.Man kann auch auf Spalten über ihren Index zugreifen. Dieser ist eine
Zahl in eckigen Klammern, die die Position der Spalte innerhalb des
Datensatzes von links zählend identifiziert, z.B. wird die erste Spalte
von hund.kk.df
durch hund.kk.df[1]
identifiziert.
length()
nicht die Anzahl der Elemente (Zellen)
der Spalte sondern die Anzahl der Spalten, also 1, aus; für die Anzahl
der Zellen der Spalte muss man die Funktion nrow()
benutzen, die die Anzahl der Zeilen der Spalte (d.h. des reduzierten
Datensatzes) ausgibt (die gleich der Länge des entsprechenden mit dem
$-Operator erstellten Vektors ist):
> head(hund.kk.df[2]) Datum
1 1900-01-03
2 1900-03-20
3 1900-05-22
4 1900-12-24
5 1900-12-24
6 1900-12-31
> length(hund.kk.df[2])
[1] 1
> nrow(hund.kk.df[2]) # = length(hund.kk.df$Datum)
[1] 100
Wenn der Datensatz eine Kopfzeile hat, kann man auch auf eine Spalte zugreifen, indem man statt eines numerischen Index den Spaltennamen in Anführungsstrichen zwischen die eckigen Klammern setzt:
> head(hund.kk.df["Datum"])
> length(hund.kk.df["Datum"])
> nrow(hund.kk.df["Datum"])
Durch Indizes ermöglicht R den Zugriff auf die Inhalte von Datensätzen in vielfältiger Weise. Es gibt zwei Typen von Indizes in R, numerische und logische, deren Verwendungen im Folgenden anhand von zahlreichen Beispielen gezeigt wird.
Der Index einer Datensatzspalte kann nicht nur eine einzige Zahl sein sondern auch ein beliebiger Vektor von Zahlen zwischen eckigen Klammern. Ein solcher Ausdruck heißt deswegen auch ein Index-Vektor (zur Erinnerung: in R ist auch eine einzige Zahl ein Vektor). Damit kann man nicht nur auf einzelne Datensatzspalten sondern auch auf mehrere Spalten gleichzeitig über ihre Indizes zugreifen:
> head(hund.kk.df[2:3]) Datum Textklasse
1 1900-01-03 Zeitung
2 1900-03-20 Zeitung
3 1900-05-22 Belletristik
4 1900-12-24 Zeitung
5 1900-12-24 Zeitung
6 1900-12-31 Belletristik
> length(hund.kk.df[2:3])
[1] 2
> nrow(hund.kk.df[2:3])
[1] 100
> dwds.data.frame(hund.kk.df[c(2,5)]) Datum Treffer
1 1900-01-03 An Hausthieren wie H
2 1900-03-20 Auch die Heyse-Teleg
3 1900-05-22 In der ebergötzener
4 1900-12-24 ""Ein guter Mann sch
5 1900-12-24 Das scheint zu bewei
6 1900-12-31 Wenn der Knüppel bei
> length(hund.kk.df[c(2,5)])
[1] 2
> nrow(hund.kk.df[c(2,5)])
[1] 100
> length(hund.kk.df[c("Datum", "Textklasse")])
> length(hund.kk.df[c("Datum", "Textklasse")])
> nrow(hund.kk.df[c("Datum", "Textklasse")])
Auch auf beliebige Elemente von Spalten (d.h. auf die Zellen des Datensatzes) kann man mittels Index-Vektoren zugreifen (ein Beispiel haben wir hier schon gesehen). Der Index-Vektor kann auch aus einem Funktionsaufruf bestehen, sofern der Rückgabewert dieser ein Vektor von Zahlen ist. Hier einige Beispiele:
> hund.kk.df$Datum[1]
# der Wert in der ersten Zelle der Datum-Spalte
> hund.kk.df$Datum[c(11,22,33)]
# die Werte in den 11., 22. und 33. Zellen der Spalte
> hund.kk.df$Datum[67:76] # die Werte in den Zellen 67 bis 76 der Spalte
> with(hund.kk.df, Datum[length(Datum)]) # der Wert in der letzten Zelle der Spalte (warum?)
> hund.kk.df$Datum[nrow(hund.kk.df)] # auch der Wert in der letzten Zelle der Spalte (warum?)
> with(hund.kk.df, Datum[seq(1, length(Datum), 10)]) # die Werte jeder zehnten Zelle der Spalte
> hund.kk.df$Datum[seq(1, nrow(hund.kk.df), 10)] # auch die Werte jeder zehnten Zelle der Spalte
Steht ein Minuszeichen vor dem Index-Vektor, bedeutet das den Ausschluss der im Vektor identifizierten Positionen, d.h. alle übrigen Positionen werden ausgewählt:
> head(hund.kk.df[-(4:5)]) # alle Spalten des Datensatzes außer der 4. und 5. (also die 1. bis 3. Spalten)
> hund.kk.df$Datum[-1]
# die Werte aller Zellen der Datum-Spalte außer der ersten
> hund.kk.df$Datum[-c(11,22,33)] # die Werte aller Zellen der Spalte außer der 11., 22. und 33.
> hund.kk.df$Datum[-(67:76)] # die Werte aller Zellen der Spalte außer den 67. bis 76.
> with(hund.kk.df, Datum[-length(Datum)]) # die Werte aller Zellen der Spalte außer der letzten
> hund.kk.df$Datum[-seq(1, nrow(hund.kk.df), 10)] # die Werte aller Zellen der Spalte außer jeder zehnten
hund.kk.df$Datum[c(11,22,33)] die Werte im Datensatz
ausgewählt, die sich gleichzeitig in der Datum-Spalte und in der 11.,
22. bzw. 33. Zeile befinden. Weiter unten zeigen wir andere
Möglichkeiten, auf Datensatzzeilen zuzugreifen.
Die Elemente eines Index-Vektors können nicht nur Zahlen sein sondern
auch die Wahrheitswerte TRUE
und FALSE
. Der
Wert TRUE
bedeutet, dass der Wert der entsprechenden
Position (z.B. der Zelle einer Datensatzspalte) ausgewählt wird, der
Wert FALSE
bedeutet, dass der Wert der entsprechenden
Position ausgeschlossen wird. Anders als die Zahlen in einem
numerischen Index-Vektor werden Wahrheitswerte in einem Index-Vektor,
der kürzer ist als das damit indizierte Objekt (z.B. ein Datensatz oder
eine Spalte eines Datensatzes), der Reihe nach wiederholt:
> head(hund.kk.df[c(FALSE, FALSE, TRUE, FALSE, FALSE)]) # nur die 3. Spalte
> head(hund.kk.df[c(FALSE, FALSE, TRUE)]) # dasselbe, weil die zwei FALSE
-Werte an der 4. und 5. Position wiederholt werden
> with(hund.kk.df, Datum[c(rep(FALSE, times = length(Datum)-1, TRUE)] # der Wert in der letzten Zelle der Spalte (alle anderen sind FALSE
)
> hund.kk.df$Datum[c(rep(FALSE,times=9), TRUE)] # die Werte jeder zehnten Zelle der Spalte
Aber normalerweise verwendet man TRUE
und FALSE
nicht direkt in Index-Vektoren, sondern man
bildet solche Vektoren mit Hilfe der folgenden Operatoren, die
Funktionen sind, die einen Wahrheitswert (oder Vektor von
Wahrheitswerten) als Rückgabewert haben:
&
(logische Konjunktion: TRUE
nur, wenn beide Konjunkte den Wert TRUE
haben)|
(logische Disjunktion: FALSE
nur, wenn beide Disjunkte den Wert FALSE
haben)!
(logische Negation: verwandelt den Wert TRUE
in FALSE
und umgekehrt)==
(Gleichheit: TRUE
nur, wenn beide Teile identisch sind)!=
(Ungleichheit: TRUE
nur, wenn beide Teile nicht identisch sind)<
(kleiner), >
(größer), <=
(kleiner gleich), >=
(größer gleich)<
, >
, <=
und >=
wird TRUE
wie 1
und FALSE
wie 0 behandelt – also ist
z.B. ‚FALSE < TRUE
‘ TRUE
– und Zeichenketten werden verglichen gemäß der Folge der
Zeichen im verwendeten Zeichensatz, wobei die Zeichen für die Zahlen
vor den Buchstaben kommen – also sind z.B. nicht nur
‚"a" < "b"
‘, ‚"1" <
"2"
‘ und ‚"1" < "a"
‘ alle
TRUE
sondern auch ‚"10" <
"2"
‘ (aber ‚10 < 2
‘ ist
natürlich FALSE
).Mit solchen Operatoren kann man Bedingungen formulieren, die sich auf
die Eigenschaften des Datensatzes beziehen, um Teile des Datensatzes
auszuwählen (in den folgenden Beispielen lassen wir
mit length()
jeweils nur die Anzahl der ausgewählten
Elemente (hier Treffer) ausgeben, nicht die Elemente selbst, um nicht
sehr lange Ausgaben zu haben):
# Anzahl der Treffer der Textklasse Belletristik:
> with(hund.kk.df, length(Treffer[Textklasse == "Belletristik"]))
[1] 59
# Anzahl der Treffer der Textklassen außer Belletristik:
> with(hund.kk.df, length(Treffer[Textklasse != "Belletristik"]))
[1] 41
# Anzahl der Treffer der Textklassen Wissenschaft oder Gebrauchsliteratur:
> with(hund.kk.df, length(Treffer[Textklasse == "Wissenschaft" | Textklasse == "Gebrauchsliteratur"]))
[1] 21
# Anzahl der Treffer, die mehr als 100 Zeichen enthalten:
> with(hund.kk.df, length(Treffer[nchar(Treffer) > 100]))
[1] 62
# Anzahl der Treffer der Textklasse Belletristik, die mehr als 100 Zeichen enthalten:
> with(hund.kk.df, length(Treffer[Textklasse == "Belletristik" & nchar(Treffer) > 100]))
[1] 28
# Anzahl der Treffer, die zwischen 50 und 100 Zeichen enthalten:
> with(hund.kk.df, length(Treffer[nchar(Treffer) >= 50 & nchar(Treffer) <= 100]))
[1] 26
which()
, which.min()
, which.max()
Mit der eingebauten Funktion which()
kann man Positionen
innerhalb eines Vektors – daher auch innerhalb einer
Datensatzspalte – finden, die logische Bedingungen erfüllen.
which()
ist ein wahrheitswertiger
Ausdruck, z.B. eine Funktion, die einen Wahrheitswert oder Vektor von
Wahrheitswerten zurückgibt, und der Rückgabewert
von which()
ist ein Vektor der Indizes des Arguments, die
den Wert TRUE
haben. Diesen kann man als Index-Vektor
benutzen, um Zellen eines Datensatzes auszuwählen.Beispiele:
# Welche Zellen der Spalte Textklasse haben den Wert "Wissenschaft"?
> which(hund.kk.df$Textklasse == "Wissenschaft")
[1] 10 11 12 13
# In welchen Zellen der Treffer-Spalte haben die Treffer weniger als 50 Zeichen?
> with(hund.kk.df, which(nchar(Treffer) < 50)) # alternativ: which(nchar(hund.kk.df$Treffer) < 50)
[1] 6 9 16 19 28 36 50 52 66 78 80 86
# In welcher Zelle der Treffer-Spalte befindet sich der kürzeste Treffer?
> with(hund.kk.df, which(nchar(Treffer) == min(nchar(Treffer))))
[1] 19
# In welcher Zelle der Treffer-Spalte befindet sich der längste Treffer?
> with(hund.kk.df, which(nchar(Treffer) == max(nchar(Treffer))))
[1] 40
# Wieviele Zeichen enhält der kürzeste Treffer?
> with(hund.kk.df, nchar(Treffer[which(nchar(Treffer) == min(nchar(Treffer)))]))
[1] 22
# Wieviele Zeichen enhält der längste Treffer?
> with(hund.kk.df, nchar(Treffer[which(nchar(Treffer) == max(nchar(Treffer)))]))
[1] 578
nchar()
nimmt einen Vektor von (einem oder mehr)
Zeichtenketten als Argument und gibt einen Vektor von Zahlen zurück,
die der jeweiligen Anzahl der Zeichen der Elemente des Arguments
entsprechen.Für die Auswahl des kleinsten bzw. größten numerischen Werts eines
Vektors gibt es die von which()
abgeleiteten
Funktionen which.min()
und which.max()
, die
kürzere Eingaben ermöglichen:
# In welcher Zelle der Treffer-Spalte ist der kürzeste Treffer?
> with(hund.kk.df, which.min(nchar(Treffer)))
[1] 19
# In welcher Zelle der Treffer-Spalte ist der längste Treffer?
> with(hund.kk.df, which.max(nchar(Treffer)))
[1] 40
# Wieviele Zeichen enhält der kürzeste Treffer?
> with(hund.kk.df, nchar(Treffer[which.min(nchar(Treffer))]))
[1] 22
# Wieviele Zeichen enhält der längste Treffer?
> with(hund.kk.df, nchar(Treffer[which.max(nchar(Treffer))]))
[1] 578
(Die Funktion which.max()
haben wir schon als Möglichkeit
kennengelernt,
den Modalwert einer
Häufigkeitsverteilungen zu berechnen, wobei, wie auch dort betont wurde,
eigentlich nur die Position (Zelle) des Modalwerts innerhalb des Vektors
der Häufigkeiten berechnet wird und nur durch „Bennenungen“
der Elemente des Vektors der tatsächliche Modalwert auch ausgegeben
wird.)
Anders als bei Datensatzspalten kann man auf Datensatzzeilen nicht mit
Hilfe des $-Operators oder der with()
-Funktion zugreifen
sondern nur über die Indizierung des Datensatzes. Aber es gibt einen
Unterschied zur bisherigen Indizierung: Um Zeilen von Spalten zu
unterscheiden, gibt es zwei Stellen für Index-Vektoren zwischen den
eckigen Klammern, die durch ein Komma getrennt sind. Der erste (linke)
Index-Vektor bestimmt die Zeilenauswahl, der zweite (rechte) die
Spaltenauswahl. Fehlt einer der Index-Vektoren (wobei das Komma nicht
fehlen darf!), bedeutet das, dass alle Zellen der entsprechenden
Komponente des Datensatzes (also der Zeile bzw. der Spalte) ausgegeben
werden (N.B.: als Vektor, im Gegensatz zur Ausgabe von Spalten durch
einen Index-Vektor). Hier einige Beispiele:
# der Inhalt der Zelle in der 36. Zeile und der 4. Spalte:
> hund.kk.df[36, 4] # alternativ: hund.kk.df[36, "Quelle"], beide dasselbe wie: hund.kk.df$Quelle[36]
[1] "Berliner Tageblatt (Sonntags-Ausgabe), 16.02.1902"
# die 36. Zeile (N.B.: das Komma darf nicht fehlen):
> hund.kk.df[36, ]
Nr. Datum Textklasse Quelle
36 36 1902-02-16 Zeitung Berliner Tageblatt (Sonntags-Ausgabe), 16.02.1902
Treffer
36 Der Techniker ist manchmal ein geriebener Hund.
# der Teil des Datensatzes beschränkt auf die Zeilen 36 bis 39 und die Spalten 2 und 3:
> hund.kk.df[36:39, 2:3] # alternativ: hund.kk.df[36:39, c("Datum", "Textklasse")]
Datum Textklasse
36 1902-02-16 Zeitung
37 1902-02-16 Zeitung
38 1902-02-16 Zeitung
39 1902-05-16 Belletristik
Über solche Doppelindizes kann man auch die Datensatzzeilen bezüglich
der Reihenfolge einer gegegebenen Spalte mit Hilfe der
Funktion order()
sortieren, wie wir
schon gesehen haben;
hier noch einige Beispiele:
> dwds.data.frame(hund.kk.df[order(hund.kk.df$Datum, decreasing = TRUE), ])Nr. Datum Textklasse Quelle Treffer
96 96 1904-03-04 Zeitung Berliner Tageblatt ( Ich hatte dem Prinze
97 97 1904-03-04 Zeitung Berliner Tageblatt ( Er hetzte einen ande
98 98 1904-03-04 Zeitung Vossische Zeitung (M Ich hatte dem Prinze
99 99 1904-03-04 Zeitung Vossische Zeitung (M Er hetzte einen ande
100 100 1904-03-04 Zeitung Vossische Zeitung (M Der Prinz sei oft fr
95 95 1904-03-03 Zeitung Berliner Tageblatt ( In einem Revier der
> dwds.data.frame(hund.kk.df[order(hund.kk.df$Quelle), ], Zeilen = 10:15) Nr. Datum Textklasse Quelle Treffer
26 26 1901-12-31 Belletristik Altenberg, Peter: Wa Tristan lebend in Is
27 27 1901-12-31 Belletristik Altenberg, Peter: Wa Käme nun ein anderer
28 28 1901-12-31 Belletristik Altenberg, Peter: Wa »Die Mode 'Christent
14 14 1900-12-31 Belletristik Bassewitz, Gerdt von In demselben Augenbl
29 29 1901-12-31 Gebrauchsliteratur Baudissin, Wolf von Der Hund oder die Ka
30 30 1901-12-31 Gebrauchsliteratur Baudissin, Wolf von Ein altes, sehr derb
> dwds.data.frame(hund.kk.df[order(hund.kk.df$Treffer), ], Zeilen = 15) Nr. Datum Textklasse Quelle Treffer
85 85 1903-12-31 Belletristik Keyserling, Eduard v - ""Ja,"" sagte Mank
86 86 1903-12-31 Belletristik Keyserling, Eduard v ""Der Hund,"" sagte
4 4 1900-12-24 Zeitung Kölnische Zeitung (A ""Ein guter Mann sch
87 87 1903-12-31 Belletristik Keyserling, Eduard v ""Hierher - hierher,
28 28 1901-12-31 Belletristik Altenberg, Peter: Wa »Die Mode 'Christent
62 62 1902-12-31 Belletristik Scheerbart, Paul: Im »Mit diesem leichtsi
55 55 1902-12-31 Belletristik Scheerbart, Paul: Im »Nu?« brüllt der Hun
58 58 1902-12-31 Belletristik Scheerbart, Paul: Im »Nu?« fragt der Hund
79 79 1903-12-31 Belletristik Frapan, Ilse: Arbeit »Nur über meine Leic
80 80 1903-12-31 Belletristik Frapan, Ilse: Arbeit »Selber verflucht, s
51 51 1902-12-31 Belletristik Scheerbart, Paul: Im »Wetter!« ruft er, »
61 61 1902-12-31 Belletristik Scheerbart, Paul: Im »Wir haben Deine lei
23 23 1901-12-31 Belletristik Altenberg, Peter: Wa Am nächsten Morgen k
78 78 1903-12-31 Belletristik Frapan, Ilse: Arbeit An der Spitalscheuer
1 1 1900-01-03 Zeitung Frankfurter Zeitung An Hausthieren wie H
Anmerkungen:
dwds.data.frame()
ist; der Datensatz selber wird dadurch nicht verändert. Wenn man aber
den Rückgabewert der Variable des Datensatzes zuweist (z.B. mit dieser
Eingabe: hund.kk.df <-
dwds.data.frame(hund.kk.df[order(hund.kk.df$Datum, decreasing = TRUE),
])
), dann wird der Datensatz dementsprechend verändert (mehr
dazu gleich im folgenden Abschnitt).Durch Kombinationen von Indizierung und Zuweisung kann man Datensätze ändern, um z.B. fehlerhafte Angaben zu korrigieren oder löschen, oder neue Merkmale oder Beobachtungen aufzunehmen. Hier einige Beispiele:
> hund.kk.df[36, 2] # aktueller Wert
[1] "1902-02-16"
> datum.orig <- hund.kk.df[36, 2] # Wert speichern zwecks Wiederherstellung
> hund.kk.df[36, 2] <- "1902-02-15" # Wert ändern
> hund.kk.df[36, 2] # neuer Wert
[1] "1902-02-15"
> (hund.kk.df[36, 2] <- datum.orig) # Originalwert wiederherstellen
[1] "1902-02-16"
> hund.kk.df$Trefferlaenge <- nchar(hund.kk.df$Treffer)
> dwds.data.frame(hund.kk.df, Abbrev = 15) # So sieht der geänderte Datensatz jetzt aus:
Nr. Datum Textklasse Quelle Treffer Trefferlaenge 1 1 1900-01-03 Zeitung Frankfurter Zei An Hausthieren 94 2 2 1900-03-20 Zeitung Die Fackel [Ele Auch die Heyse- 142 3 3 1900-05-22 Belletristik Brief von Wilhe In der ebergötz 63 4 4 1900-12-24 Zeitung Kölnische Zeitu ""Ein guter Man 82 5 5 1900-12-24 Zeitung Kölnische Zeitu Das scheint zu 196 6 6 1900-12-31 Belletristik Duncker, Dora: Wenn der Knüppe 33
# Es gibt mehrere wirkungsgleiche Alternativen:
> hund.kk.df <- hund.kk.df[-6] # löscht die 6. Spalte (aber das klappt nicht: hund.kk.df <- hund.kk.df[-"Trefferlaenge"])
> hund.kk.df <- hund.kk.df[ , -6] # dasselbe
> hund.kk.df <- hund.kk.df[1:5] # dasselbe
> hund.kk.df2 <- hund.kk.df[c(1,3,2,4,5)] # tauscht die Spalten Textklasse und Datum
>dwds.data.frame(hund.kk.df2)
Nr. Textklasse Datum Quelle Treffer 1 1 Zeitung 1900-01-03 Frankfurter Zeitung An Hausthieren wie H 2 2 Zeitung 1900-03-20 Die Fackel [Elektron Auch die Heyse-Teleg 3 3 Belletristik 1900-05-22 Brief von Wilhelm Bu In der ebergötzener 4 4 Zeitung 1900-12-24 Kölnische Zeitung (A ""Ein guter Mann sch 5 5 Zeitung 1900-12-24 Kölnische Zeitung (A Das scheint zu bewei 6 6 Belletristik 1900-12-31 Duncker, Dora: Großs Wenn der Knüppel beiN.B: Dabei muss der Index-Vektor die Indizes aller Spalten des Datensatzes enthalten, sonst würden durch die Zuweisung die nicht angegebenen Spalten gelöscht werden! Z.B.:
> hund.kk.df2 <- hund.kk.df[c(3,2)] # tauscht die 2. und 3. Spalten und löscht die übrigen:
> dwds.data.frame(hund.kk.df2)
Textklasse Datum 1 Zeitung 1900-01-03 2 Zeitung 1900-03-20 3 Belletristik 1900-05-22 4 Zeitung 1900-12-24 5 Zeitung 1900-12-24 6 Belletristik 1900-12-31
> hund.kk.df2 <- hund.kk.df[-(6:13), ] # löscht die 6. bis 13. Zeilen
> dwds.data.frame(hund.kk.df2, Zeilen=8) # So sieht der geänderte Datensatz jetzt aus:
Nr. Datum Textklasse Quelle Treffer 1 1 1900-01-03 Zeitung Frankfurter Zeitung An Hausthieren wie H 2 2 1900-03-20 Zeitung Die Fackel [Elektron Auch die Heyse-Teleg 3 3 1900-05-22 Belletristik Brief von Wilhelm Bu In der ebergötzener 4 4 1900-12-24 Zeitung Kölnische Zeitung (A ""Ein guter Mann sch 5 5 1900-12-24 Zeitung Kölnische Zeitung (A Das scheint zu bewei 14 14 1900-12-31 Belletristik Bassewitz, Gerdt von In demselben Augenbl 15 15 1900-12-31 Belletristik Ganghofer, Ludwig: D Er, der die Leute bi 16 16 1900-12-31 Belletristik Ganghofer, Ludwig: D Und streiten wie HunDurch das Löschen der Zeilen entsteht eine Lücke in der von R automatisch erstellten Zeilennummerierung; die Lücke kann wie folgt wieder geschlossen werden:
> row.names(hund.kk.df2) <- c(1:nrow(hund.kk.df2))
> dwds.data.frame(hund.kk.df2, Zeilen=8)
Nr. Datum Textklasse Quelle Treffer 1 1 1900-01-03 Zeitung Frankfurter Zeitung An Hausthieren wie H 2 2 1900-03-20 Zeitung Die Fackel [Elektron Auch die Heyse-Teleg 3 3 1900-05-22 Belletristik Brief von Wilhelm Bu In der ebergötzener 4 4 1900-12-24 Zeitung Kölnische Zeitung (A ""Ein guter Mann sch 5 5 1900-12-24 Zeitung Kölnische Zeitung (A Das scheint zu bewei 6 14 1900-12-31 Belletristik Bassewitz, Gerdt von In demselben Augenbl 7 15 1900-12-31 Belletristik Ganghofer, Ludwig: D Er, der die Leute bi 8 16 1900-12-31 Belletristik Ganghofer, Ludwig: D Und streiten wie HunDie durch das Löschen der Zeilen entstandene Lücke in der Spalte Nr. bleibt allerdings erhalten, weil diese ja ein Teil des Datensatzes ist.
> zeile101 <- data.frame(Nr.="101", Datum="1904-12-23", Textklasse="Zeitung", Quelle="Die Ferkel, 12.23.1904", Treffer="Ob der Hund schläft?")
Mit der Funktion rbind()
binden wir dann diesen
Datensatz mit dem ursprünglichen Datensatz zusammen und durch
Zuweisung an die Variable dieses Datensatzes wird er geändert:
> hund.kk.df2 <- rbind(hund.kk.df, zeile101)
> dwds.data.frame(hund.kk.df2, Zeilen=-6) # So sieht der geänderte Datensatz jetzt aus:
Nr. Datum Textklasse Quelle Treffer 96 96 1904-03-04 Zeitung Berliner Tageblatt ( Ich hatte dem Prinze 97 97 1904-03-04 Zeitung Berliner Tageblatt ( Er hetzte einen ande 98 98 1904-03-04 Zeitung Vossische Zeitung (M Ich hatte dem Prinze 99 99 1904-03-04 Zeitung Vossische Zeitung (M Er hetzte einen ande 100 100 1904-03-04 Zeitung Vossische Zeitung (M Der Prinz sei oft fr 101 101 1904-12-23 Zeitung Die Ferkel, 12.23.19 Ob der Hund schläft?