Ich versuche, die colClasses
-Optionen in der read.csv
-Funktion in R anzugeben. In meinen Daten ist die erste Spalte "Zeit" im Wesentlichen ein Zeichenvektor, während die übrigen Spalten numerisch sind.
data <- read.csv("test.csv", comment.char="" ,
colClasses=c(time="character", "numeric"),
strip.white=FALSE)
Im obigen Befehl möchte ich, dass R in der Spalte "Zeit" als "Zeichen" und der Rest als Zahlenwert einliest. Obwohl die Variable "data" nach Abschluss des Befehls das korrekte Ergebnis hatte, gab R die folgenden Warnungen zurück. 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
Der colClasses-Vektor muss eine Länge haben, die der Anzahl der importierten Spalten entspricht. Angenommen, rest Ihrer Dataset-Spalten sind 5:
colClasses=c("character",rep("numeric",5))
Sie können die colClasse nur für eine Spalte angeben.
In Ihrem Beispiel sollten Sie also Folgendes verwenden:
data <- read.csv('test.csv', colClasses=c("time"="character"))
Angenommen, Ihre Spalte "Zeit" enthält mindestens eine Beobachtung mit einem nicht numerischen Zeichen und alle Ihre anderen Spalten haben nur Zahlen. Dann wird 'read.csv' standardmäßig als 'Faktor' und alle anderen Spalten gelesen die Spalten als 'numerisch'. Das Setzen von 'stringsAsFactors = F' hat daher dasselbe Ergebnis wie das manuelle Einstellen der 'colClasses', d. H.
data <- read.csv('test.csv', stringsAsFactors=F)
Wenn Sie sich auf Namen aus der Kopfzeile anstatt auf Spaltennummern beziehen möchten, können Sie etwa Folgendes 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)
Angenommen, meine datetime-Felder befinden sich in Spalten 36 und 38 für mehrere datetime-Spalten ohne Kopfzeile und viele Spalten. Ich möchte, dass sie als Zeichenfelder gelesen werden:
data<-read.csv("test.csv", head=FALSE, colClasses=c("V36"="character","V38"="character"))
Wenn wir kombinieren, was @Hendy und @Oddysseus Ithaca dazu beigetragen haben, erhalten wir sauberere und allgemeinere (d. H. Anpassungsfähige?) Codeabschnitte.
data <- read.csv("test.csv", head = F, colClasses = c(V36 = "character", V38 = "character"))
Ich weiß, dass OP nach der utils::read.csv
-Funktion gefragt hat, aber lassen Sie mich eine Antwort für diese geben, die hier auf der Suche nach der Verwendung von readr::read_csv
von der Tidyverse kommt.
read_csv ("test.csv", col_names=FALSE, col_types = cols (.default = "c", time = "i"))
Dies sollte den Standardtyp für alle Spalten als Zeichen festlegen, während Zeit als Ganzzahl analysiert werden würde.