0Pricing
R Academy · Lezione

Lettura di file CSV con read_csv()

Importi file delimitati con opzioni per l'inferenza dei tipi di colonna, il salto di righe e la codifica.

Lettura di file CSV con read_csv() è una lezione R Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento R Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso R Academy include 4 lezioni in totale.

Perché usare readr invece di Base R?

Base R dispone di read.csv(), ma la funzione read_csv() del pacchetto readr è più veloce, restituisce un tibble (non un data frame), offre un'inferenza predefinita dei tipi più efficace e visualizza messaggi informativi sui tipi di colonna rilevati.

library(readr)

# read_csv() vs read.csv():
# 1. Returns a tibble (prints nicely, faster subsetting)
# 2. Does NOT convert strings to factors by default
# 3. Shows column specification message
# 4. Faster for large files

# Example with a simple inline CSV:
df <- read_csv('name,score,grade
Alice,85,B
Bob,92,A
Carol,78,C')

print(df)
print(class(df))

read_csv() da un percorso di file

L'utilizzo più comune consiste nel passare a read_csv() una stringa contenente il percorso del file. La funzione rileva automaticamente la virgola come delimitatore, usa la prima riga come intestazione e deduce i tipi delle colonne dalle prime 1000 righe.

library(readr)

# Reading from a file path (illustrative — file not present)
# df <- read_csv('data/sales_2024.csv')

# Reading from a URL also works:
# df <- read_csv('https://example.com/data.csv')

# Using a literal inline string for demonstration:
df <- read_csv('region,q1,q2,q3
East,100,120,115
West,200,195,210
North,80,85,90')

print(df)

col_types — Specificare i tipi delle colonne

Usi col_types per sovrascrivere l'inferenza dei tipi di readr. Passi una stringa compatta (un carattere per colonna: c=character, d=double, i=integer, l=logical, D=date, _=skip) oppure una specifica cols().

library(readr)

df <- read_csv('id,date,amount,active
1,2024-01-15,99.99,TRUE
2,2024-02-20,149.50,FALSE
3,2024-03-10,75.00,TRUE',
# Compact: integer, Date, double, logical
col_types = 'iDdl')

print(df)
cat('\nColumn types:\n')
print(sapply(df, class))

cols() per specificare esplicitamente i tipi

Per un controllo maggiore, usi cols() per specificare il tipo di ogni colonna. Utilizzi le funzioni collector: col_double(), col_character(), col_integer(), col_date(format=), col_skip() e col_guess().

library(readr)

df <- read_csv('id,name,score,date
1,Alice,85.5,2024-01-15
2,Bob,92.0,2024-02-20
3,Carol,78.3,2024-03-10',
col_types = cols(
  id = col_integer(),
  name = col_character(),
  score = col_double(),
  date = col_date(format = '%Y-%m-%d')
))

print(df)
print(class(df$date))

Argomenti skip e n_max

skip=n salta le prime n righe prima della lettura (utile per i metadati o le intestazioni con commenti). n_max=n legge al massimo n righe di dati: è perfetto per visualizzare un'anteprima di file grandi o caricare solo il primo blocco.

library(readr)

# File with metadata in first 2 lines
# (simulated with literal string)
df <- read_csv('# Generated 2024-01-15
# Source: internal DB
name,score,grade
Alice,85,B
Bob,92,A
Carol,78,C
Dave,88,B',
skip = 2,     # Skip the 2 comment lines
n_max = 3     # Read only 3 data rows
)

print(df)

Argomento na — Definire i valori mancanti

Per impostazione predefinita, read_csv() considera mancanti le stringhe vuote e NA. Usi l'argomento na per specificare altre stringhe da leggere come NA; esempi comuni: 'N/A', 'NULL', '-999', '.'.

library(readr)

df <- read_csv('name,score,city
Alice,85,NYC
Bob,N/A,NULL
Carol,78,.
Dave,-999,Chicago',
na = c('', 'NA', 'N/A', 'NULL', '.', '-999')
)

print(df)
cat('NAs per column:\n')
print(colSums(is.na(df)))

col_names — Nomi personalizzati delle colonne

Imposti col_names = FALSE quando il file non contiene una riga di intestazione: readr assegnerà automaticamente alle colonne i nomi X1, X2 e così via. In alternativa, passi a col_names un vettore di caratteri per specificare nomi personalizzati e saltare la riga di intestazione.

library(readr)

# File without headers
df <- read_csv('Alice,85,NYC
Bob,92,LA
Carol,78,Chicago',
col_names = c('name','score','city')
)

print(df)

# auto-names when no header:
df2 <- read_csv('1,2,3
4,5,6', col_names = FALSE)
print(df2)

locale() — Gestire i formati non standard

locale() controlla il modo in cui readr interpreta i formati specifici di una locale: separatori decimali ( ',' nei dati europei), formati delle date, codifica e separatori delle migliaia. Lo passi a read_csv(locale=...).

library(readr)

# European-style CSV: semicolons as delimiters, comma as decimal
# read_csv2() is shorthand for this locale
df <- read_csv2('name;price;qty
Alice;9,99;100
Bob;24,50;50',
locale = locale(decimal_mark=',')
)

print(df)

# For dates in non-ISO format:
parse_date('15/01/2024', format='%d/%m/%Y')

progress e show_col_types

Per i file grandi, read_csv() mostra una barra di avanzamento. Imposti progress=FALSE per nasconderla (utile negli script). show_col_types=FALSE nasconde il messaggio sui tipi delle colonne quando li ha già verificati.

library(readr)

# Suppress progress and type messages for production scripts
df <- read_csv(
  'a,b,c
  1,x,TRUE
  2,y,FALSE',
  show_col_types = FALSE,
  progress = FALSE
)

print(df)

Problems() — Diagnosticare gli errori di parsing

Quando readr incontra valori che non corrispondono al tipo previsto, li sostituisce con NA e registra un avviso. Chiami problems(df) per verificare esattamente quali righe e colonne presentavano problemi e quali erano i valori originali.

library(readr)

# Intentional type mismatch: 'N/A' in numeric column
df <- suppressWarnings(read_csv(
  'id,score
  1,85
  2,N/A
  3,92',
  col_types = cols(score = col_double())
))

print(df)
print(problems(df))

Leggere più file con map()

Combini readr con purrr::map() per leggere e concatenare per righe più file CSV in un unico passaggio. Questo schema è essenziale per elaborare dati mensili o trimestrali suddivisi in file separati.

library(readr)
library(purrr)
library(dplyr)

# Simulated: read and bind multiple CSV files
files <- c('q1.csv', 'q2.csv', 'q3.csv')

# In practice:
# all_data <- map_df(files, read_csv, show_col_types=FALSE)

# Demonstration with inline data:
q1 <- read_csv('month,sales\nJan,100\nFeb,120', show_col_types=FALSE)
q2 <- read_csv('month,sales\nApr,130\nMay,145', show_col_types=FALSE)

bind_rows(list(q1=q1, q2=q2), .id='quarter')

Verifica rapida

Come si comunica a read_csv() che i valori 'N/A' e '-99' devono essere trattati come mancanti (NA)?

Riepilogo: read_csv() con readr

Punti chiave per leggere file CSV con readr:

  • read_csv('file.csv') — legge un CSV, restituisce un tibble e deduce i tipi delle colonne
  • col_types = 'idcl' oppure cols(x=col_double()) — specifica esplicitamente i tipi
  • skip=n — salta righe di intestazione o metadati; n_max=n — limita il numero di righe lette
  • na = c('N/A','NULL') — considera NA altre stringhe
  • locale(decimal_mark=',') — gestisce i formati numerici europei
  • show_col_types=FALSE — nasconde le informazioni sui tipi negli script
  • problems(df) — esamina gli errori di parsing
  • Combini con map_df(files, read_csv) per più file
library(readr)

# Production-ready read_csv() call
df <- read_csv(
  'name,score,city,active
  Alice,85,NYC,TRUE
  Bob,N/A,LA,FALSE
  Carol,78,NULL,TRUE',
  col_types = cols(
    name = col_character(),
    score = col_double(),
    city = col_character(),
    active = col_logical()
  ),
  na = c('', 'NA', 'N/A', 'NULL'),
  show_col_types = FALSE
)

print(df)

Domande Frequenti

La lezione «Lettura di file CSV con read_csv()» è gratuita?

Sì — il testo completo di «Lettura di file CSV con read_csv()» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso R Academy, passa a CoddyKit PRO. Il corso R Academy include 4 lezioni in totale.

Cosa imparerò in «Lettura di file CSV con read_csv()»?

Importi file delimitati con opzioni per l'inferenza dei tipi di colonna, il salto di righe e la codifica. Eserciti R Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare R Academy?

Non è richiesta alcuna esperienza precedente. R Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Lettura di file CSV con read_csv()»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione R Academy?

Sì. Ogni lezione R Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Lettura di file CSV con read_csv()
  2. Analisi di file TSV e a larghezza fissa
  3. Importazione di file Excel con readxl
  4. Scrittura dei dati in più formati
← Torna a R Academy