Menu
Coddy logo textTech

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] 2

Combina 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"
challenge icon

Sfida

Facile

Completa 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")
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore R online