R: Konvertieren von Datenrahmen (Mischfaktor und numerisch) zu XTS in R
Frage
Wenn ein Datenrahmen mit gemischtem Faktor und numerischen Spalten zu einem xts Umwandlung, wird alle meine Daten in Strings umgewandelt. Dies ist kein Problem mit den Faktoren, aber es ist sehr ärgerlich mit der Numerik. Gibt es eine Abhilfe?
Zum Beispiel:
> x
marketTimestamp price id
1 2010-12-17 11:38:31.100 83.89 b-0
2 2010-12-17 11:38:31.100 83.88 b-1
3 2010-12-17 11:38:31.100 83.87 b-2
4 2010-12-17 11:38:31.300 83.91 o-0
5 2010-12-17 11:38:31.300 83.92 o-1
6 2010-12-17 11:38:31.300 83.93 o-2
> as.xts(x[,-1],as.POSIXct(x[,1]))
price id
2010-12-17 11:38:31 "83.89" "b-0"
2010-12-17 11:38:31 "83.88" "b-1"
2010-12-17 11:38:31 "83.87" "b-2"
2010-12-17 11:38:31 "83.91" "o-0"
2010-12-17 11:38:31 "83.92" "o-1"
2010-12-17 11:38:31 "83.93" "o-2"
Im Idealfall möchte ich die erste Spalte numerisch bleiben, während die zweite in einen String umgewandelt wird. Die Lösung Bedürfnisse vollständig automatisiert sein, da ich mit Datensätzen mit einer großen Anzahl von Spalten arbeite, und ich kann nicht immer vorhersagen, welche diejenigen Faktor sein wird, und die numerisch sein wird.
-
Edit:
Ich habe versucht, dieses Problem zu umgehen, indem Sie die folgende Funktion definieren:
to.xts <- function(data) {
timestamp <- as.POSIXct(data[,1])
coredata <- data[,-1]
headers <- names(coredata)
data.type <- c()
for (header in headers) {
data.type[headers==header] <- class(coredata[[header]])
}
data.factor <- xts(coredata[,data.type=="factor"],timestamp)
data.numeric <- xts(coredata[,data.type=="numeric"],timestamp)
data.xts <- cbind(data.factor,data.numeric)
}
aber wenn die beiden XTS Objekte verschmelzen, wird der String-Daten zu NAs konvertiert:
> x
id side
2010-12-17 11:38:31 "b-0" "BID"
2010-12-17 11:38:31 "b-1" "BID"
2010-12-17 11:38:31 "b-2" "BID"
> y
price
2010-12-17 11:38:31 83.89
2010-12-17 11:38:31 83.88
2010-12-17 11:38:31 83.87
> merge(x,y)
id side price
2010-12-17 11:38:31 NA NA 83.89
2010-12-17 11:38:31 NA NA 83.88
2010-12-17 11:38:31 NA NA 83.87
Warning message:
In merge.xts(x, y) : NAs introduced by coercion
Ist das ein bekanntes Problem mit dem XTS-Paket, oder bin ich etwas falsch zu machen?
Lösung
Sie können dies als xts nicht eine numerische Matrix erfordert.
Andere Tipps
Es ist eine Einschränkung von Entwurf. bedenken Sie, dass xts oder Zoo ist im Grunde eine Matrix Plus Index. kein Datenrahmen und Index.