Vai al contenuto principale

Come fare subset dei dati in R: selezionare, filtrare ed estrarre dati

Impara a creare subset dei data frame in R usando le parentesi [], subset() e dplyr. Include esempi di codice e un confronto dei metodi.
Aggiornato 29 set 2026  · 6 min leggi

Scopri con l'IA

ChatGPTClaudePerplexity

Quasi ogni progetto di analisi dati in R prevede l’estrazione di righe, colonne o valori specifici da un dataset più grande. In R questo si fa con il subsetting, usando la notazione con parentesi [] per un controllo di indicizzazione di basso livello, la funzione subset() per un filtraggio leggibile basato su condizioni, oppure i verbi di dplyr come filter() e select() per pipeline di dati moderne.

TL;DR

  • Usa la notazione con parentesi df[rows, cols] per il subsetting basato sulla posizione di righe e colonne

  • Usa $ per estrarre una singola colonna come vettore: df$column_name

  • Usa subset(df, condition) per un filtraggio leggibile basato su condizioni nelle sessioni interattive

  • Aggiungi drop = FALSE quando selezioni una singola colonna per mantenere il risultato come data frame

  • Per codice di produzione e pipeline di dati, preferisci la notazione con parentesi o dplyr::filter() rispetto a subset()

Selezionare le righe

Ecco un esempio di subsetting su un data frame chiamato debt.

debt[3:6, ]
      name  payment
3      Dan      150
4      Rob       50
5      Rob       75
6      Rob      100

La sintassi df[rows, columns] è la base del subsetting in R. Qui, 3:6 seleziona le righe dalla 3 alla 6, e lo spazio vuoto dopo la virgola significa "restituisci tutte le colonne". Il risultato è un data frame più piccolo con la stessa struttura di colonne dell’originale.

Selezionare righe da una colonna specifica

Un comportamento a cui fare attenzione è la semplificazione che avviene quando selezioni una singola colonna. Selezionare le prime tre righe solo della colonna payment semplifica il risultato in un vettore.

debt[1:3, 2]
100 200 150

Qui il 2 si riferisce alla seconda colonna di debt, cioè payment. Poiché abbiamo selezionato una singola colonna, R elimina la struttura del data frame e restituisce un semplice vettore numerico.

Formattazione del dataframe

Per mantenerla come dataframe, aggiungi semplicemente drop = FALSE come mostrato sotto: 

debt[1:3, 2, drop = FALSE]
    payment
1       100
2       200
3       150

Selezionare una colonna specifica

Puoi anche selezionare una singola colonna con l’operatore $ scrivendo dataframe$column. Nel seguente esempio estraiamo la colonna payment da debt. R restituisce il risultato come vettore anziché come data frame.

debt$payment
100 200 150 50 75 100

Usare la funzione subset()

Quando vuoi creare subset più complessi o basati su una condizione, il passo successivo è usare la funzione subset(). Per esempio, e se volessi esaminare i debiti di una persona chiamata Dan? Potresti usare le parentesi per selezionare i suoi debiti e sommarli, ma non è un modo molto robusto di procedere, soprattutto in presenza di potenziali modifiche al dataset.

# Funziona, ma non è informativo
debt[1:3, ]

subset() su una variabile categoriale

Un modo migliore è usare la funzione subset() per selezionare le righe in cui la colonna name è uguale a Dan. Nota che serve il doppio segno di uguale (==), noto come operatore relazionale.

# Funziona, ma non è informativo né robusto
debt[1:3, ]

# Molto più informativo!
subset(debt, name == "Dan")
      name     payment
1      Dan         100
2      Dan         200
3      Dan         150

Il risultato contiene solo le tre righe in cui name è uguale a "Dan". Nota che i numeri di riga originali (1, 2, 3) sono conservati, il che ti aiuta a ricondurre i risultati al data frame di origine.

subset() su una variabile numerica

Possiamo fare subset anche su colonne numeriche. Se volessimo vedere le righe in cui i pagamenti sono pari a 100 $, faresti quanto segue:

subset(debt, payment == 100)
      name  payment
1      Dan      100
6      Rob      100

Due righe soddisfano la condizione: la riga 1 (Dan) e la riga 6 (Rob) hanno entrambe pagamenti esattamente di 100 $. Questo mostra che subset() scansiona ogni riga indipendentemente dal nome, restituendo tutte le corrispondenze.

Accedere e fare subset dei dataframe

E se ti servissero solo i flussi di cassa dell’azienda A? Qui la funzione subset() filtra le righe da un data frame diverso, cash:

subset(cash, company == "A")
      company  cash_flow  year
1           A       1000     1
2           A       4000     3
3           A        550     4

Ricorda:

  • Il primo argomento che passi a subset() è il nome del tuo dataframe, cash.

  • Nota che non dovresti mettere company tra virgolette!

  • == è l’operatore di uguaglianza. Verifica dove due cose sono uguali e restituisce un vettore logico.

Esempio interattivo del metodo subset()

Nel seguente esempio, usiamo subset() per selezionare le righe di cash corrispondenti all’azienda B, poi filtriamo i flussi di cassa in scadenza tra 1 anno.

# Righe relative all’azienda B
subset(cash, company == "B")

# Righe con flussi di cassa in scadenza tra 1 anno
subset(cash, year == 1)

Eseguendo il codice sopra, ottieni il seguente risultato:

  company cash_flow year
4       B      1500    1
5       B      1100    2
6       B       750    4
7       B      6000    5
  company cash_flow year
1       A      1000    1
4       B      1500    1

Provalo tu stesso nel nostro corso Introduction to R for Finance.

Questo contenuto è tratto dal corso Introduction to R for Finance di Lore Dirick su DataCamp.

Subsetting con dplyr

Il pacchetto tidyverse dplyr offre un’alternativa moderna per fare subset dei data frame. La funzione filter() seleziona le righe e select() sceglie le colonne, entrambe usando una sintassi a pipe che concatena le operazioni.

library(dplyr)

# Filtra le righe in cui name è "Dan"
debt %>% filter(name == "Dan")

# Seleziona solo la colonna payment (rimane un data frame)
debt %>% select(payment)

# Combina: filtra le righe e seleziona le colonne in un’unica pipeline
debt %>%
  filter(payment >= 100) %>%
  select(name, payment)

A differenza di subset(), le funzioni di dplyr funzionano in modo affidabile all’interno di altre funzioni e gestiscono operazioni raggruppate, join e sintesi nella stessa pipeline. Se stai costruendo workflow di analisi dati anziché eseguire query sporadiche, dplyr è lo strumento standard.

Confronto dei metodi di subsetting

Confrontiamo i diversi metodi di subsetting in R in una tabella:

Metodo Sintassi Ideale per Note
Parentesi [] df[rows, cols] Controllo di basso livello, programmazione Funziona su tutti gli oggetti R
$ df$col Estrazione rapida di una singola colonna Restituisce un vettore, non un data frame
subset() subset(df, cond) Filtraggio interattivo Non consigliato all’interno di funzioni
dplyr::filter() df %>% filter(cond) Pipeline di dati, codice leggibile Richiede il pacchetto dplyr

Considerazioni finali

R ti offre diversi modi per fare subset dei dati: la notazione con parentesi [] per il pieno controllo, subset() per un filtraggio interattivo e leggibile, e dplyr::filter() per le pipeline di dati. Le parentesi funzionano su qualsiasi oggetto R, subset() è chiaro per esplorazioni una tantum e dplyr si adatta bene quando concateni più operazioni.

Per approfondire la manipolazione dei dati in R, ti consiglio il corso Data Manipulation with dplyr o il corso Introduction to the Tidyverse su DataCamp.

Domande frequenti su Subset in R

Qual è la differenza tra subset() e dplyr::filter() in R?

Entrambe le funzioni filtrano le righe in base a condizioni, ma si comportano in modo diverso nei contesti di programmazione. subset() usa una valutazione non standard, che la rende comoda per l’uso interattivo ma inaffidabile all’interno di funzioni definite dall’utente. dplyr::filter() è progettata per funzionare in modo sicuro all’interno delle funzioni e si integra con l’operatore pipe (%>%) per concatenare più passaggi di manipolazione dei dati.

Come faccio a fare subset di più colonne contemporaneamente in R?

Puoi passare un vettore di nomi di colonne o di indici all’interno delle parentesi. Per esempio, df[, c("name", "payment")] seleziona due colonne per nome, mentre df[, c(1, 3)] le seleziona per posizione. Con dplyr, puoi usare select(df, name, payment) o funzioni helper come starts_with() e contains() per trovare colonne in base a un pattern.

Perché selezionando una singola colonna in R ottengo un vettore invece di un data frame?

R semplifica il risultato per impostazione predefinita quando viene selezionata una sola colonna usando la notazione con parentesi. Questo comportamento è controllato dal parametro drop, che di default è TRUE. Per mantenere il risultato come data frame, aggiungi drop = FALSE all’espressione con parentesi, ad esempio df[, 2, drop = FALSE].

Posso fare subset delle righe in base a più condizioni in R?

Sì. Puoi combinare le condizioni usando gli operatori & (AND) e | (OR). Ad esempio, subset(df, name == "Dan" & payment > 100) restituisce le righe in cui il nome è Dan e il pagamento supera 100. Con dplyr, puoi separare le condizioni con virgole all’interno di filter(): df %>% filter(name == "Dan", payment > 100).

Argomenti
R
Data Science

I migliori corsi su R

Corso

Introduzione a R

4 ore
3.1M
Impara le basi dell'analisi dei dati in R, compresi vettori, liste e data frame, e fai pratica con R con set di dati reali.
Vedi i dettagliRight Arrow
Inizia Il Corso
Mostra altroRight Arrow
Correlato

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

Mostra AltroMostra Altro