Filtrare le righe
Fa parte della sezione Logica e flusso del percorso R di Coddy. Lezione 44 di 64.
Un vettore logico con un valore per riga seleziona le righe per cui è TRUE. Mettilo prima della virgola e lascia vuoto il lato delle colonne per mantenerle tutte:
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, ]))Output:
name age city
1 ada 36 london
3 cy 41 rome
[1] 2Combina le condizioni con & (entrambe) e | (almeno una). Ogni parte confronta un'intera colonna, quindi il risultato contiene ancora un valore per riga:
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"])Output:
name age city
1 ada 36 london
[1] "bo" "cy"subset(df, condition) fa la stessa cosa con meno codice, perché al suo interno è possibile usare direttamente i nomi delle colonne:
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)Output:
[1] "ada" "cy" Quando nessuna riga corrisponde, il risultato è un frame di dati con 0 righe, quindi controlla nrow() prima di leggerlo:
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])Output:
[1] 0
[1] "none"Sfida
FacileCompleta adults_in(df, city). df ha le colonne name, age e city. Restituisci i nomi delle persone che hanno almeno 18 anni e vivono in city, nell'ordine delle righe e uniti con , , oppure none.
Il codice fornito legge la tabella dall'input con read.csv(text = input): la prima riga contiene i nomi delle colonne e ogni riga successiva è una riga della tabella, con i valori separati da virgole. L'ultima riga dell'input contiene la città e il codice stampa il valore restituito.
Provalo tu
adults_in <- function(df, city) {
# Write your code here
"none"
}
# Supplied input/output code: keep it as it is
input <- suppressWarnings(readLines(file("stdin")))
df <- read.csv(text = input[-length(input)])
cat(adults_in(df, input[length(input)]), sep = "\n")
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Le stringhe in dettaglio
Sottostringhe con substr()Formattazione con sprintf()Dividere e unireRicerca nelle stringheSostituzione del testoRipasso - Generatore di nomi utente4Matrici
Creazione di matriciIndicizzazione delle matriciRiepiloghi di righe e colonneOperazioni aritmetiche con le matriciRipasso - Schema dei posti a sedere10Flusso di controllo avanzato
La funzione switch()ifelse() vettorialerepeat e breakFunzioni ricorsiveRiepilogo - Classificatore di voti2Ricerche chiave-valore
Ricerche in vettori con nomiControllare le chiaviAggiungere e rimuovere chiaviIterare sui nomiRiepilogo - Sportello titoli5Progetto - Registro dei voti
Aggiungere studentiRegistrare i voti8Ordinamento e raggruppamento
Ordinare i vettoriOrdinare in base a una chiaveRaggruppare con split()Riepiloghi dei gruppiRipasso - Classifica3Insiemi e conteggio
Valori univociOperazioni sugli insiemiTest di appartenenzaConteggio con table()Riepilogo - Ospiti dell’evento6Le funzioni come valori
Funzioni anonimePassare funzioniRestituire funzioniClosure con statoRiepilogo - Regole di sconto9DataFrame
Creare DataFrameColonne e righeFiltrare le righeAggiungere e ordinareRiepilogo - Report delle vendite12Progetto - Gestione delle spese
Registrare le speseSpesa totaleEsercitati da solo: Compilatore R online