Question

Je suis en train de préciser les options de colClasses dans la fonction read.csv R. Dans mes données, la première colonne « temps » est essentiellement un vecteur de caractère alors que le reste des colonnes sont numériques.

data <- read.csv("test.csv", comment.char="" , 
                 colClasses=c(time="character", "numeric"), 
                 strip.white=FALSE)

Dans la commande ci-dessus, je voudrais R à lire dans la colonne « temps » comme « caractère » et le reste sous forme numérique. Bien que, la variable « données » a eu le bon résultat après la commande terminée, R retourné les avertissements suivants. Je me demande comment je pourrais corriger ces avertissements?

Warning messages:
 1: In read.table(file = file, header = header, sep = sep, quote = quote,  :
    not all columns named in 'colClasses' exist
 2: In tmp[i[i > 0L]] <- colClasses :
    number of items to replace is not a multiple of replacement length

Derek

Était-ce utile?

La solution

Le vecteur colClasses doit avoir une longueur égale au nombre de colonnes importées. En supposant que le reste de vos colonnes de jeux de données sont 5:

colClasses=c("character",rep("numeric",5))

Autres conseils

Vous pouvez spécifier le colClasse pour une seule colonne.

Dans votre exemple, vous devez utiliser:

data <- read.csv('test.csv', colClasses=c("time"="character"))

En supposant que votre colonne « temps » a au moins une observation avec un caractère non numérique et toutes vos autres colonnes ont seulement des chiffres, puis « par défaut de read.csv sera à lire dans le « temps » comme un « facteur » et tout le reste des colonnes comme « numérique ». Par conséquent, la mise en « stringsAsFactors = F » aura le même résultat que la définition des « » colClasses manuellement i.e..

data <- read.csv('test.csv', stringsAsFactors=F)

Si vous voulez faire référence à des noms de l'en-tête plutôt que des numéros de colonne, vous pouvez utiliser quelque chose comme ceci:

fname <- "test.csv"
headset <- read.csv(fname, header = TRUE, nrows = 10)
classes <- sapply(headset, class)
classes[names(classes) %in% c("time")] <- "character"
dataset <- read.csv(fname, header = TRUE, colClasses = classes)

Pour plusieurs colonnes datetime sans en-tête, et beaucoup de colonnes, disent mes champs datetime sont dans les colonnes 36 et 38, et je veux les lire dans les champs de caractères comme:

data<-read.csv("test.csv", head=FALSE,   colClasses=c("V36"="character","V38"="character"))                        

Je sais OP a demandé sur la fonction utils::read.csv, mais permettez-moi de fournir une réponse à ceux-ci qui viennent ici chercher comment le faire en utilisant readr::read_csv du tidyverse.

read_csv ("test.csv", col_names=FALSE, col_types = cols (.default = "c", time = "i"))

Cela devrait définir le type par défaut pour toutes les colonnes comme caractère , tandis que temps serait analysé comme entier.

Si nous combinons ce @Hendy et @Oddysseus Ithaca a contribué, nous obtenons plus propre et un morceau de code plus général (à savoir, adaptable?).

    data <- read.csv("test.csv", head = F, colClasses = c(V36 = "character", V38 = "character"))                        
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top