CSV manipulation in R

0

I have several files with a .csv extension, I need to read them all, however I have a problem where I have the following file range.

df1 -> Cabeçalho numérico antes do cabeçalho atual

1    2     3 
nome idade escolaridade
joao 10    6ano
Bia 20     faculdade

df 2 -> Cabeçalho sem numérico

nome    idade escolaridade
Joaquim 6     colégio
Andre   1    maternal

df 3 -> Separador #

So far I've only done this:

filenames = list.files(pattern="*.csv")
 if(is.empty(filenames)==FALSE)
for(c in 1:length(filenames)){

a<- read.table(filenames[c],,header=T, sep=";", dec=",")
}
    
asked by anonymous 09.10.2018 / 20:34

1 answer

2

The data.table :: fread function is an optimized version of read.table. The skip option allows you to include a string that marks the beginning of the file. The function is also quite efficient in detecting tabs automatically, which is very useful if your files follow different standards. See the example:

library(data.table)

dfEx <- fread(
  input = '# um comentário marcado com "hashtag"
           data de criação: 12/10/2018
           1    2     3 
           nome idade escolaridade
           joao 10    6ano
           Bia 20     faculdade',
  skip = 'nome'  
)

> dfEx
   nome idade escolaridade
1: joao    10         6ano
2:  Bia    20    faculdade

The default of fread is to generate an object of data.table and data.frame classes; you can change this with the data.table = FALSE option.

To read multiple files at once, applying the fread (or read.table, etc) function on the list is more efficient than using a loop:

listaArquivos <- list.files(pattern = '.csv$')
# 0 $ indica para selecionar nomes que terminam com .csv

if( length(listaArquivos) ) listaDados <- lapply(listaArquivos, fread, skip = 'nome')

This will generate a list where each element is a data.table (or data.frame). You can merge everything by using the data.table :: rbindlist:

dados <- rbindlist(listaDados)
    
10.10.2018 / 06:07