Zeilen filtern
Teil des Abschnitts Logik und Ablaufsteuerung der R-Journey von Coddy. Lektion 44 von 64.
Ein logischer Vektor mit einem Wert pro Zeile wählt die Zeilen aus, für die er TRUE ist. Setze ihn vor das Komma und lasse die Spaltenseite leer, um jede Spalte beizubehalten:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
print(people[people$age > 30, ])
print(nrow(people[people$age > 30, ]))Ausgabe:
name age city
1 ada 36 london
3 cy 41 rome
[1] 2Kombiniere Bedingungen mit & (beide) und | (entweder). Jeder Teil vergleicht eine gesamte Spalte, daher enthält das Ergebnis weiterhin einen Wert pro Zeile:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
print(people[people$age > 30 & people$city == "london", ])
print(people$name[people$age < 25 | people$city == "rome"])Ausgabe:
name age city
1 ada 36 london
[1] "bo" "cy"subset(df, condition) erledigt dasselbe mit kürzerem Code, da darin die Spaltennamen direkt verwendet werden können:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
older <- subset(people, age > 30)
print(older$name)Ausgabe:
[1] "ada" "cy" Wenn keine Zeile übereinstimmt, ist das Ergebnis ein Dataframe mit 0 Zeilen. Überprüfe daher nrow(), bevor du daraus liest:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
nobody <- people[people$age > 90, ]
print(nrow(nobody))
print(if (nrow(nobody) == 0) "none" else nobody$name[1])Ausgabe:
[1] 0
[1] "none"Aufgabe
EinfachVervollständige adults_in(df, city). df enthält die Spalten name, age und city. Gib die Namen der Personen zurück, die mindestens 18 Jahre alt sind und in city leben, in Zeilenreihenfolge und mit , verbunden, oder none.
Der bereitgestellte Code liest die Tabelle mit read.csv(text = input) aus der Eingabe: Die erste Zeile enthält die Spaltennamen und jede folgende Zeile ist eine Zeile, wobei die Werte durch Kommas getrennt sind. Die letzte Eingabezeile enthält die Stadt, und der Code gibt den zurückgegebenen Wert aus.
Probier es selbst
adults_in <- function(df, city) {
# Schreibe deinen Code hier
"none"
}
# Mitgelieferter Ein-/Ausgabe-Code: belasse ihn unverändert
input <- suppressWarnings(readLines(file("stdin")))
df <- read.csv(text = input[-length(input)])
cat(adults_in(df, input[length(input)]), sep = "\n")
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik und Ablaufsteuerung
1Strings im Detail
Teilstrings mit substr()Formatierung mit sprintf()Aufteilen und VerbindenStrings durchsuchenText ersetzenWiederholung – Benutzernamen-Generator4Matrizen
Matrizen erstellenMatrizen indizierenZusammenfassungen von Zeilen und SpaltenMatrizenarithmetikRückblick – Sitzplan10Fortgeschrittener Kontrollfluss
Die switch()-FunktionVektorisierter ifelse()repeat und breakRekursive FunktionenRückblick – Notenklassifizierung2Schlüssel-Wert-Suchen
Benannte Vektor-SuchenSchlüssel prüfenSchlüssel hinzufügen und entfernenNamen durchlaufenRückblick – Aktienübersicht5Projekt – Notenbuch
Schüler hinzufügenNoten eintragen3Mengen und Zählen
Eindeutige WerteMengenoperationenZugehörigkeitstestsZählen mit table()Rückblick – Gäste einer Veranstaltung6Funktionen als Werte
Anonyme FunktionenFunktionen übergebenFunktionen zurückgebenClosures mit ZustandRückblick – Rabattregeln9Datenrahmen
Datenrahmen erstellenSpalten und ZeilenZeilen filternHinzufügen und SortierenZusammenfassung – Verkaufsbericht12Projekt – Ausgaben-Tracker
Ausgaben erfassenGesamtausgabenÜbe selbstständig: Online-R-Compiler