Spécification colClasses dans le read.csv
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
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"))