Domanda

Sto cercando di specificare le opzioni colClasses nella funzione read.csv in R. Nei miei dati, la prima colonna "tempo" è fondamentalmente un vettore di carattere, mentre il resto delle colonne sono numerici.

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

Nel comando sopra, vorrei R per leggere nella colonna "tempo" come "carattere" e il resto come numerico. Anche se, la variabile "dati" ha avuto il risultato corretto dopo che il comando è stato completato, R restituito le seguenti avvertenze. Mi chiedo come ho potuto risolvere questi avvertimenti?

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

È stato utile?

Soluzione

I colClasses vettore deve avere lunghezza pari al numero di colonne importate. Supponendo che il resto delle colonne del set di dati sono 5:

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

Altri suggerimenti

È possibile specificare il colClasse solo per uno colonne.

Quindi nel tuo esempio, si dovrebbe usare:

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

Supponendo che la colonna 'tempo' ha almeno un'osservazione con un carattere non numerico e tutte le altre colonne hanno solo i numeri, poi 'di default di read.csv sarà da leggere in 'tempo' come un 'fattore' e tutti il resto delle colonne come 'numerico'. Pertanto impostazione 'stringsAsFactors = F' avrà lo stesso risultato come impostazione '' colClasses manualmente cioè.,

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

Se si vuole fare riferimento ai nomi dalla intestazione piuttosto che i numeri di colonna, si può usare qualcosa di simile a questo:

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)

Nel caso di più colonne datetime senza intestazione, e un sacco di colonne, dicono i miei campi datetime sono riportati nelle colonne 36 e 38, e voglio loro leggere come campi di caratteri:

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

Lo so OP chiesto sulla funzione utils::read.csv, ma mi permetta di dare una risposta a queste che vengono qui a cercare come fare usando readr::read_csv dal tidyverse.

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

Questo dovrebbe impostare il tipo predefinito per tutte le colonne come carattere , mentre Ora verrebbe usata come intero.

Se combiniamo ciò @Hendy e @Oddysseus Itaca ha contribuito, otteniamo più pulita e un più generale (vale a dire, adattabile?) Pezzo di codice.

    data <- read.csv("test.csv", head = F, colClasses = c(V36 = "character", V38 = "character"))                        
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top