R Academy · Lección

Análisis de archivos TSV y de ancho fijo

Use read_tsv() y read_fwf() para datos separados por tabulaciones y de ancho fijo.

Lección 2 de 413 pasos

Análisis de archivos TSV y de ancho fijo es una lección gratuita de R Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de R Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de R Academy incluye 4 lecciones en total.

Más allá de CSV: otros formatos de archivo

No todos los datos tabulares se presentan como CSV. Los archivos separados por tabulaciones (TSV), los archivos delimitados por barras verticales y los archivos de ancho fijo (FWF) son habituales en datos gubernamentales, sistemas heredados y bases de datos científicas. El paquete readr gestiona todos estos formatos con una sintaxis coherente.

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() — Valores separados por tabulaciones

read_tsv() lee archivos delimitados por tabulaciones. Tiene los mismos argumentos que read_csv(): col_types, na, skip, etc. Se prefiere TSV a CSV cuando los datos contienen comas, por ejemplo, en direcciones o descripciones.

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() — Cualquier delimitador

read_delim(file, delim='|') admite cualquier delimitador de un solo carácter. Los archivos delimitados por barras verticales (|) son habituales en almacenes de datos y exportaciones gubernamentales porque es poco frecuente que las barras aparezcan en los propios datos.

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() para archivos separados por punto y coma

Los archivos CSV europeos suelen usar punto y coma como delimitador y comas como separadores decimales. read_csv2() es un atajo para read_delim(delim=';', locale=locale(decimal_mark=',')), aunque también puede configurar read_delim() directamente.

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 de ancho fijo

Los archivos de ancho fijo no tienen delimitadores: las columnas se identifican por sus posiciones de caracteres. Son habituales en exportaciones de mainframes antiguos y datos gubernamentales. Use fwf_widths() para especificar los anchos de columna o fwf_cols() para indicar las posiciones inicial y final.

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() para columnas iniciales y finales

fwf_positions(start, end, col_names) especifica las posiciones exactas de inicio y fin de los caracteres (con índices desde 1). Es una opción precisa cuando los anchos de columna varían o cuando necesita omitir algunas columnas sin especificarlas.

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() — Detectar automáticamente el ancho

fwf_empty(file, col_names) intenta detectar automáticamente los límites de las columnas basándose en los espacios en blanco. Proporcione los nombres de las columnas por separado. Funciona mejor con archivos FWF bien formateados y con espaciado uniforme.

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() — Analizar texto sin procesar

read_lines(file) lee un archivo de texto línea por línea y devuelve un vector de caracteres. Es la función de lectura de más bajo nivel; úsela cuando necesite preprocesar las líneas antes de analizarlas, por ejemplo, para filtrar comentarios o gestionar formatos incoherentes.

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() para inspección incremental

read_lines(file, n_max=10) previsualiza solo las primeras líneas de cualquier archivo de texto antes de realizar una lectura completa. Esto resulta útil para diagnosticar problemas de codificación, encontrar la fila de encabezado real o detectar el tipo de delimitador.

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

Gestionar problemas de codificación

Los caracteres no ASCII (acentos y alfabetos no latinos) requieren especificar la codificación correcta. Use locale(encoding='latin1') o locale(encoding='UTF-8') dentro de read_csv() o read_delim(). La codificación predeterminada es 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')))

Elegir el lector adecuado

Guía rápida para elegir la función correcta de readr:

  • Comas → read_csv()
  • Puntos y comas + decimales europeos → read_csv2()
  • Tabulaciones → read_tsv()
  • Otros delimitadores → read_delim(delim='|')
  • Posiciones fijas → read_fwf()
  • Inspección de texto sin procesar → 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)

Comprobación rápida

¿Qué función de readr es la opción más adecuada para leer un archivo cuyas columnas están definidas por posiciones fijas de caracteres (sin delimitadores)?

Resumen: archivos TSV y de ancho fijo

Ideas clave sobre los formatos de archivos planos que no son CSV:

  • read_tsv() — separado por tabulaciones; ideal cuando los datos contienen comas
  • read_delim(delim='|') — cualquier delimitador de un solo carácter
  • read_csv2() — separado por punto y coma, con separadores decimales europeos
  • read_fwf(fwf_widths(c(10,5,8))) — ancho fijo mediante anchos de columna
  • read_fwf(fwf_positions(start, end)) — ancho fijo mediante posiciones exactas
  • read_lines(file, n_max=10) — inspecciona las líneas sin procesar antes del análisis
  • Todas las funciones comparten los argumentos col_types, na, skip y 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)))
Gratis para empezar

Aprende R con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
43
Lecciones
159

Preguntas frecuentes

¿La lección «Análisis de archivos TSV y de ancho fijo» es gratis?

Sí — el texto completo de «Análisis de archivos TSV y de ancho fijo» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de R Academy, actualiza a CoddyKit PRO. El curso de R Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Análisis de archivos TSV y de ancho fijo»?

Use read_tsv() y read_fwf() para datos separados por tabulaciones y de ancho fijo. Practicas R Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar R Academy?

No se requiere experiencia previa. R Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Análisis de archivos TSV y de ancho fijo»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de R Academy?

Sí. Cada lección de R Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Lectura de archivos CSV con read_csv()
  2. Análisis de archivos TSV y de ancho fijo
  3. Importación de archivos de Excel con readxl
  4. Escritura de datos en varios formatos
← Volver a R Academy