web-dev-qa-db-fra.com

Ignorer des lignes spécifiques à l'aide de read.csv dans R

Je souhaite ignorer les première et troisième lignes de mon fichier csv lors de l'importation du fichier dans un cadre de données dans R. 

Dans le fichier original, mes en-têtes sont sur la ligne 2. 

En utilisant l'argument skip dans read.csv, je peux ignorer la 1ère ligne et définir l'argument d'en-tête sur TRUE en conservant la 3ème ligne du fichier d'origine dans mon cadre de données. 

Quelqu'un peut-il suggérer comment ignorer plusieurs lignes spécifiques dans R? Vous trouverez ci-dessous ce que j'ai pu bricoler?

Puis-je passer un vecteur à l'argument ignorer en spécifiant les lignes exactes à ignorer?

prach <- read.csv("RSRAN104_-_PRACH_Propagation_Delay-PLMN-day-rsran_RU50EP1_reports_RSRAN104_xml-2016_08_23-21_33_03__604.csv", header = TRUE, sep = ",", stringsAsFactors = FALSE, skip = 1)
17
TheGoat

Une façon de faire est d'utiliser deux commandes read.csv, la première lit les en-têtes et la seconde les données:

headers = read.csv(file, skip = 1, header = F, nrows = 1, as.is = T)
df = read.csv(file, skip = 3, header = F)
colnames(df)= headers

J'ai créé le fichier texte suivant pour tester ceci:

do not read
a,b,c
previous line are headers
1,2,3
4,5,6

Le résultat est:

> df
  a b c
1 1 2 3
2 4 5 6
39
R. Schifini

Ma solution parfaite: 

#' read csv table, wrapper of \code{\link{read.csv}}
#' @description read csv table, wrapper of \code{\link{read.csv}}
#' @param tolower whether to convert all column names to lower case
#' @param skip.rows rows to skip (1 based) before read in, eg 1:3
#' @return returns a data frame
#' @export
ez.read = function(file, ..., skip.rows=NULL, tolower=FALSE){
    if (!is.null(skip.rows)) {
        tmp = readLines(file)
        tmp = tmp[-(skip.rows)]
        tmpFile = tempfile()
        on.exit(unlink(tmpFile))
        writeLines(tmp,tmpFile)
        file = tmpFile
    }
    result = read.csv(file, ...)
    if (tolower) names(result) = tolower(names(result))
    return(result)
}
0
Jerry T