webentwicklung-frage-antwort-db.com.de

ColClasses in der read.csv angeben

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

96
defoo

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))
73
George Dontas

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"))
144
Etienne

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)
13
wkmor1

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)
10
scentoni

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"))                        
3
Odysseus Ithaca

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"))                        
0
seapen

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.

0
EuGENE