0Pricing
R Academy · Lezione

Analisi di file TSV e a larghezza fissa

Usi read_tsv() e read_fwf() per dati separati da tabulazioni e a larghezza fissa.

Analisi di file TSV e a larghezza fissa è una lezione R Academy gratuita su CoddyKit. Questa è la lezione 2 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.

Oltre i CSV: altri formati di file

Non tutti i dati tabellari sono disponibili in formato CSV. I file con valori separati da tabulazioni (TSV), delimitati da pipe e a larghezza fissa (FWF) sono comuni nei dati governativi, nei sistemi legacy e nei database scientifici. Il pacchetto readr gestisce tutti questi formati con una sintassi coerente.

library(readr)

# readr's flat file readers:
# read_csv()    - comma-separated
# read_csv2()   - semicolon-separated (European)
# read_tsv()    - tab-separated
# read_delim()  - any delimiter
# read_fwf()    - fixed-width format
# read_lines()  - raw text, one line per element

cat('All readr functions return tibbles with the same interface!')

read_tsv() — Valori separati da tabulazioni

read_tsv() legge file delimitati da tabulazioni. Ha gli stessi argomenti di read_csv(): col_types, na, skip e così via. TSV è preferibile a CSV quando i dati contengono virgole, ad esempio in indirizzi o descrizioni.

library(readr)

# Simulated TSV using \t as delimiter
tsv_data <- 'name\tscore\tcity
Alice Smith\t85\tNew York, NY
Bob Jones\t92\tLos Angeles, CA
Carol White\t78\tChicago, IL'

# Note: cities contain commas — TSV handles this cleanly
df <- read_tsv(tsv_data, show_col_types=FALSE)
print(df)

read_delim() — Qualsiasi delimitatore

read_delim(file, delim='|') gestisce qualsiasi delimitatore costituito da un singolo carattere. I file delimitati da pipe (|) sono comuni nei data warehouse e nelle esportazioni governative, perché le pipe compaiono raramente nei dati.

library(readr)

# Pipe-delimited data
pipe_data <- 'ID|Name|Department|Salary
1|Alice Smith|Engineering|95000
2|Bob Jones|Marketing|72000
3|Carol White|HR|65000'

df <- read_delim(pipe_data, delim='|', show_col_types=FALSE)
print(df)

read_delim() per file con punto e virgola

I file CSV europei usano spesso il punto e virgola come delimitatore e la virgola come separatore decimale. read_csv2() è una scorciatoia per read_delim(delim=';', locale=locale(decimal_mark=',')); in alternativa, può configurare direttamente read_delim().

library(readr)

# European-style: semicolon delimiter, comma decimal
european_data <- 'name;price;quantity
Widget;9,99;100
Gadget;24,50;50
Sprocket;4,75;200'

# Method 1: read_csv2() shortcut
df1 <- read_csv2(european_data, show_col_types=FALSE)
print(df1)

# Method 2: explicit read_delim
# read_delim(data, delim=';', locale=locale(decimal_mark=','))

read_fwf() — Formato a larghezza fissa

I file a larghezza fissa non hanno delimitatori: le colonne vengono identificate dalle loro posizioni dei caratteri. Sono comuni nelle esportazioni da mainframe legacy e nei dati governativi. Usi fwf_widths() per specificare le larghezze delle colonne oppure fwf_cols() per indicare le posizioni iniziale e finale.

library(readr)

# Fixed-width data (positions matter!)
fwf_data <- 'Alice    085NYC      
Bob      092LA       
Carol    078Chicago  '

# Column widths: name=9, score=3, city=10
df <- read_fwf(
  fwf_data,
  col_positions = fwf_widths(
    widths = c(9, 3, 10),
    col_names = c('name','score','city')
  ),
  show_col_types = FALSE
)

print(df)

fwf_positions() per le colonne iniziali e finali

fwf_positions(start, end, col_names) specifica le posizioni esatte di inizio e fine dei caratteri (indicizzate a partire da 1). È una soluzione precisa quando le larghezze delle colonne variano o quando deve saltare alcune colonne omettendole dalla specifica.

library(readr)

# Another fixed-width example using start/end positions
fwf_data <- '001ALICE   02024-01-15
002BOB     01   2024-02-20
003CAROL   03   2024-03-10'

df <- read_fwf(
  fwf_data,
  col_positions = fwf_positions(
    start = c(1, 4, 11, 14),
    end   = c(3, 10, 12, 23),
    col_names = c('id','name','score','date')
  ),
  show_col_types = FALSE
)

print(df)

fwf_empty() — Rilevare automaticamente la larghezza

fwf_empty(file, col_names) tenta di rilevare automaticamente i limiti delle colonne in base agli spazi vuoti. Fornisca separatamente i nomi delle colonne. Funziona al meglio con file FWF formattati in modo ordinato e con spaziatura coerente.

library(readr)

# Well-spaced fixed-width data
fwf_data <- 'name     score  grade
Alice    85     B
Bob      92     A
Carol    78     C
Dave     88     B'

# Auto-detect column positions from whitespace
df <- read_fwf(
  fwf_data,
  col_positions = fwf_empty(fwf_data, col_names=c('name','score','grade')),
  show_col_types = FALSE
)

print(df)

read_lines() — Analisi del testo non elaborato

read_lines(file) legge un file di testo una riga alla volta e restituisce un vettore di caratteri. È la funzione di lettura di livello più basso: la usi quando deve pre-elaborare le righe prima del parsing, ad esempio per filtrare i commenti o gestire formati incoerenti.

library(readr)

# Read lines and filter manually
raw_text <- '# Comment line
# Another comment
name,score
Alice,85
Bob,92'

lines <- read_lines(raw_text)
print(lines)

# Filter out comment lines
clean_lines <- lines[!startsWith(lines, '#')]
df <- read_csv(paste(clean_lines, collapse='\n'), show_col_types=FALSE)
print(df)

read_lines() per l'ispezione incrementale

read_lines(file, n_max=10) visualizza in anteprima solo le prime righe di qualsiasi file di testo prima di procedere con una lettura completa. È utile per diagnosticare problemi di codifica, individuare la riga effettiva dell'intestazione o rilevare il tipo di delimitatore.

library(readr)

# Preview first few lines before reading
sample_file <- 'METADATA: version 1.2
DATE: 2024-01-15
---
id,name,value
1,Alice,100
2,Bob,200'

# Inspect to find where the data starts
preview <- read_lines(sample_file, n_max=4)
print(preview)
# From this we know: skip=3, then read as CSV

Gestire i problemi di codifica

I caratteri non ASCII (accenti e alfabeti non latini) richiedono la specifica della codifica corretta. Usi locale(encoding='latin1') o locale(encoding='UTF-8') all'interno di read_csv() o read_delim(). Il valore predefinito è UTF-8.

library(readr)

# Detect encoding of a file
# readr::guess_encoding('file.csv')  # Returns likely encodings

# Specify encoding explicitly
# df <- read_csv('data_latin1.csv',
#   locale = locale(encoding = 'latin1'))

# For UTF-8 with BOM (common in Windows exports):
# df <- read_csv('data_utf8bom.csv',
#   locale = locale(encoding = 'UTF-8-BOM'))

cat('Encoding matters for accented chars: \xc3\xa9 (UTF-8 for e-acute)\n')
print(guess_encoding(chartr('\xe9','e','caf\xe9')))

Scegliere la funzione di lettura corretta

Guida rapida alla scelta della funzione readr corretta:

  • Virgole → read_csv()
  • Punti e virgola e decimali europei → read_csv2()
  • Tabulazioni → read_tsv()
  • Altri delimitatori → read_delim(delim='|')
  • Posizioni fisse → read_fwf()
  • Ispezione del testo non elaborato → read_lines()
library(readr)

# Quick comparison of delimiters
csv_data  <- 'a,b,c\n1,2,3'
tsv_data  <- 'a\tb\tc\n1\t2\t3'
pipe_data <- 'a|b|c\n1|2|3'

read_csv(csv_data, show_col_types=FALSE)
read_tsv(tsv_data, show_col_types=FALSE)
read_delim(pipe_data, delim='|', show_col_types=FALSE)

Verifica rapida

Quale funzione di readr è più adatta per leggere un file in cui le colonne sono definite da posizioni fisse dei caratteri, senza delimitatori?

Riepilogo: file TSV e a larghezza fissa

Punti chiave per i formati di file flat non CSV:

  • read_tsv() — separati da tabulazioni; ideale quando i dati contengono virgole
  • read_delim(delim='|') — qualsiasi delimitatore di un singolo carattere
  • read_csv2() — separati da punto e virgola, con separatori decimali europei
  • read_fwf(fwf_widths(c(10,5,8))) — larghezza fissa specificata tramite le larghezze delle colonne
  • read_fwf(fwf_positions(start, end)) — larghezza fissa specificata tramite posizioni esatte
  • read_lines(file, n_max=10) — esamina le righe non elaborate prima del parsing
  • Tutte le funzioni condividono gli argomenti col_types, na, skip e locale()
library(readr)

# Pipe-delimited with custom NA values
df <- read_delim(
  'ID|Name|Score|City
  1|Alice|85|NYC
  2|Bob|N/A|N/A
  3|Carol|78|Chicago',
  delim = '|',
  na = c('', 'NA', 'N/A'),
  show_col_types = FALSE
)

print(df)
print(colSums(is.na(df)))

Domande Frequenti

La lezione «Analisi di file TSV e a larghezza fissa» è gratuita?

Sì — il testo completo di «Analisi di file TSV e a larghezza fissa» è 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 «Analisi di file TSV e a larghezza fissa»?

Usi read_tsv() e read_fwf() per dati separati da tabulazioni e a larghezza fissa. 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 2 di 4.

Quanto tempo richiede la lezione «Analisi di file TSV e a larghezza fissa»?

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