Leer archivo de texto de ancho fijo en R

En este artículo, vamos a ver cómo leer archivos de texto de ancho fijo en el lenguaje de programación R. 

En los archivos de texto, las columnas tendrán anchos fijos, especificados en caracteres, lo que determina la cantidad máxima de datos que puede contener. No se utilizan delimitadores para separar los campos del archivo. En su lugar, las cantidades más pequeñas de datos se rellenan con espacios para llenar el espacio asignado, de modo que el inicio de una columna determinada siempre se puede especificar como un desplazamiento desde el inicio de una línea.

Hay muchos métodos para leer los datos en un archivo de texto de ancho fijo:

  • Uso de la función read.fwf()
  • Usando la función readLines().
  • Uso de la especificación de formato de estilo Fortran.

Método 1: Usar la función read.fwf().

Este método se realiza mediante la función read.fwf del paquete utils. Tenemos que usar anchos de columna para leer.

Sintaxis: read.fwf(file, widths, header = FALSE, sep = “\t”, skip = 0, row.names, col.names, n = -1, buffersize = 2000, fileEncoding = “”, …)

Ahora, usamos read.fwf() para leer el archivo de texto de ancho fijo llamado «abcd.txt».

R

# Creating file
abcd.txt<-tempfile()
  
cat(file=abcd.txt,"Rahul2023","Ravi 2521",
    "Jaggu2130",sep="\n")
  
# Reading fixed width
read.fwf(abcd.txt, width = c(5, 2, 2),
         col.names = c("Studentname","Test1",
                       "Test2"))
unlink(abcd.txt)

Producción:

Aquí tomamos anchos en formato (5,2,2) ya que los nombres de los estudiantes tienen una longitud de string de 4,5 y las marcas tienen una longitud de string de 2 tamaños. 

En el resultado anterior, podemos observar que lee el archivo «abcd.txt» y lo muestra en formato de 5,2,2 longitudes (ejemplo: rahul,20,23 de «rahul2023»), con nombres de columna como Studentnames,Test1 ,Prueba2.

Método 2: Usar la función readLines().

Aquí vamos a utilizar la función readLines. La función readLines() en R Language lee líneas de texto de un archivo de entrada. La función readLines() es perfecta para archivos de texto ya que lee el texto línea por línea y crea objetos de carácter para cada una de las líneas.

Sintaxis: readLines(ruta)

Parámetro:
ruta: ruta del archivo

Código:

R

abcd.txt<-tempfile()
  
# adding data to the empty tempfile
cat(file = abcd.txt, "Rahul2023", "Ravi 2521",
    "Jaggu2130", sep = "\n")
  
readLines(abcd.txt)
unlink(abcd.txt)

Producción:

Método 3: Uso de la especificación de formato de estilo Fortran.

Aquí usaremos la función read.fortran(). Se utiliza para leer archivos de datos de formato fijo usando especificaciones de formato de estilo Fortran

Sintaxis: read.fortran(file, format, …, as.is = TRUE, colClasses = NA)

Parámetros:

  • archivo: archivo o conexión para leer.
  • formato: Vector de caracteres o lista de vectores. Vea los detalles abajo.
  • as.is: ¿Mantener los personajes como personajes?
  • colClasses: clases de variables para anular los valores predeterminados.

Aquí hemos creado un archivo llamado «abcd.txt» como ejemplo, como se muestra en el siguiente código. Al usar la función read.fortran, podemos leer los datos en un archivo de texto de ancho fijo usando las especificaciones de formato de estilo fortran.

R

abcd.txt<-tempfile()
cat(file = abcd.txt, "Rahul2023",
    "Ravi 2521", "Jaggu2130", sep = "\n")
  
# format of character length=5, 2 
# integers of 2-sized width
read.fortran(abcd.txt,c("A5","2I2"))
  
# format of 5 characters of width=1,4
# integers of width-1
read.fortran(abcd.txt,c("5A1","4I1"))
  
# using list of formats for each entry 
# of data for special cases
read.fortran(abcd.txt,list(c("A5","2I2"),
                           c("A4","X1","2I2"),
                           c("A5","2I2")))
  
unlink(abcd.txt)

Producción:

Publicación traducida automáticamente

Artículo escrito por gollapudisaijayanth2018 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *