Ich habe ein Problem bei der Verwendung von data.table: Wie konvertiere ich Spaltenklassen? Hier ein einfaches Beispiel: Mit data.frame habe ich kein Problem beim Konvertieren, mit data.table weiß ich einfach nicht wie:
df <- data.frame(ID=c(rep("A", 5), rep("B",5)), Quarter=c(1:5, 1:5), value=rnorm(10))
#One way: http://stackoverflow.com/questions/2851015/r-convert-data-frame-columns-from-factors-to-characters
df <- data.frame(lapply(df, as.character), stringsAsFactors=FALSE)
#Another way
df[, "value"] <- as.numeric(df[, "value"])
library(data.table)
dt <- data.table(ID=c(rep("A", 5), rep("B",5)), Quarter=c(1:5, 1:5), value=rnorm(10))
dt <- data.table(lapply(dt, as.character), stringsAsFactors=FALSE)
#Error in rep("", ncol(xi)) : invalid 'times' argument
#Produces error, does data.table not have the option stringsAsFactors?
dt[, "ID", with=FALSE] <- as.character(dt[, "ID", with=FALSE])
#Produces error: Error in `[<-.data.table`(`*tmp*`, , "ID", with = FALSE, value = "c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2)") :
#unused argument(s) (with = FALSE)
Vermisse ich hier etwas Offensichtliches?
Update aufgrund von Matthews Beitrag: Ich habe zuvor eine ältere Version verwendet, aber auch nach dem Update auf 1.6.6 (die Version, die ich jetzt verwende) wird immer noch eine Fehlermeldung angezeigt.
Update 2: Angenommen, ich möchte jede Spalte der Klasse "Faktor" in eine Spalte "Zeichen" konvertieren, weiß aber nicht im Voraus, welche Spalte zu welcher Klasse gehört. Mit einem data.frame kann ich Folgendes tun:
classes <- as.character(sapply(df, class))
colClasses <- which(classes=="factor")
df[, colClasses] <- sapply(df[, colClasses], as.character)
Kann ich mit data.table etwas Ähnliches machen?
Update 3:
sessionInfo () R Version 2.13.1 (08.07.2011) Plattform: x86_64-pc-mingw32 / x64 (64-Bit)
locale:
[1] C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] data.table_1.6.6
loaded via a namespace (and not attached):
[1] tools_2.13.1
#Produces error
. +1 sowieso. Ich bekomme keine Fehlermeldung, welche Version hast du? Es gibt jedoch ein Problem in diesem Bereich, das bereits erwähnt wurde. FR # 1224 und FR # 1493 haben eine hohe Priorität. Andries Antwort ist jedoch der beste Weg.
invalid times argument
Fehler sicher ? Arbeite gut für mich. Welche Version hast du?
data.table
Methoden unterscheiden sich von denen fürdata.frame