Frage

Ich versuche, die colClasses Optionen in der read.csv Funktion in R. In meinen Daten, die erste Spalte „Zeit“ an, ist im Grunde ein Zeichen Vektor, während der Rest der Spalten numerisch ist.

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

In dem obigen Befehl, ich mochte R in der Spalte „Zeit“ als „Zeichen“ und den Rest als numerisch lesen. Obwohl die „Daten“ Variable das richtige Ergebnis hatte, nachdem der Befehl abgeschlossen ist, zurück R die folgenden Warnhinweise. Ich frage mich, wie ich diese Warnungen beheben könnte?

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

War es hilfreich?

Lösung

Die colClasses Vektorlänge gleich der Anzahl der importierten Spalten haben. Nimmt man die Rest Ihres Datensatzes Spalten 5:

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

Andere Tipps

Sie können die colClasse angeben nur eine Spalten für.

So in Ihrem Beispiel sollten Sie verwenden:

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

Ihre ‚Zeit‘ Spalte Unter der Annahme, zumindest eine Beobachtung mit einem nicht-numerischen Zeichen und alle anderen Spalten nur Zahlen haben, dann ‚als‚Faktor Zeit ‚read.csv die Standard wird in lesen sein‘‘und alle der Rest der Spalten als ‚numerisch‘. Deshalb Einstellung ‚stringsAsFactors = F‘ wird das gleiche Ergebnis wie die Einstellung des ‚colClasses‘ manuell d.h.

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

Wenn Sie Namen aus dem Header beziehen möchten, statt Spaltennummern, können Sie so etwas wie folgt verwenden:

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)

Für mehr Datums-Wert ohne Header und vielen Spalten, sagt meine Datetime-Felder sind in Spalten 36 und 38, und ich mag, dass sie in als Zeichenfelder lesen:

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

Ich weiß OP über die utils::read.csv Funktion gefragt, aber lassen Sie mich bieten eine Antwort auf diese, die hierher kommen, Suche, wie man es tun readr::read_csv mit der tidyverse.

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

Dies sollte den Standardtyp für alle Spalten festgelegt als Charakter , während Zeit würde als integer analysiert werden.

Wenn wir kombinieren, was @Hendy und @Oddysseus Ithaca beigetragen, bekommen wir sauberer und eine allgemeinere (das heißt, anpassungsfähig?) Stück Code.

    data <- read.csv("test.csv", head = F, colClasses = c(V36 = "character", V38 = "character"))                        
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top