Menu
Coddy logo textTech

Indicizzazione logica

Fa parte della sezione Fondamenti del percorso R di Coddy. Lezione 68 di 78.

Invece di specificare posizioni esatte, puoi usare un vettore logico per selezionare gli elementi. Questa tecnica, chiamata indicizzazione logica, ti permette di filtrare un vettore in base a condizioni anziché a posizioni.

Quando applichi un confronto a un vettore, R restituisce un vettore logico della stessa lunghezza:

numbers <- c(10, 20, 30, 40, 50)
print(numbers > 25)

Output:

[1] FALSE FALSE  TRUE  TRUE  TRUE

Puoi usare questo vettore logico direttamente tra parentesi quadre per estrarre gli elementi corrispondenti:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers > 25])

Output:

[1] 30 40 50

R mantiene solo gli elementi per cui il vettore logico è TRUE. Questo approccio è molto più pulito rispetto a scrivere cicli per filtrare i dati. Puoi combinare le condizioni usando gli operatori logici:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers >= 20 & numbers <= 40])

Output:

[1] 20 30 40

L'indicizzazione logica è una delle funzionalità più potenti di R per la manipolazione dei dati e ti permette di filtrare i set di dati con espressioni semplici e leggibili.

challenge icon

Sfida

Facile

Riceverai due righe di input:

  1. Un elenco di numeri separati da virgole (ad es., 15,42,8,67,23,91,34,12,56)
  2. Due valori soglia separati da una virgola che rappresentano un intervallo (ad es., 20,60)

Usando l'indicizzazione logica:

  1. Crea un vettore numerico a partire dai numeri separati da virgole
  2. Estrai e stampa tutti gli elementi minori di della prima soglia (limite inferiore)
  3. Estrai e stampa tutti gli elementi maggiori di della seconda soglia (limite superiore)
  4. Estrai e stampa tutti gli elementi compresi nell'intervallo (maggiori o uguali alla prima soglia E minori o uguali alla seconda soglia)

Ad esempio, se gli input sono:

5,25,10,45,60,15,80,35,50
20,50

L'output dovrebbe essere:

[1]  5 10 15
[1] 60 80
[1] 25 45 35 50

Spiegazione:

  • Elementi minori di 20: 5, 10, 15
  • Elementi maggiori di 50: 60, 80
  • Elementi compresi tra 20 e 50 (estremi inclusi): 25, 45, 35, 50

Usa l'operatore & per combinare le condizioni del filtro dell'intervallo.

Provalo tu

# Leggi l'input
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
thresholds_input <- suppressWarnings(readLines(con, n = 1))
close(con)

# Converti i numeri separati da virgole in un vettore numerico
numbers <- as.numeric(unlist(strsplit(numbers_input, ",")))

# Converti i valori di soglia
thresholds <- as.numeric(unlist(strsplit(thresholds_input, ",")))
lower_bound <- thresholds[1]
upper_bound <- thresholds[2]

# TODO: Scrivi il tuo codice qui sotto
# 1. Usa l'indicizzazione logica per estrarre gli elementi minori di lower_bound e stamparli
# 2. Usa l'indicizzazione logica per estrarre gli elementi maggiori di upper_bound e stamparli
# 3. Usa l'indicizzazione logica con l'operatore & per estrarre gli elementi nell'intervallo (estremi inclusi) e stamparli
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 Fondamenti

Esercitati da solo: Compilatore R online