Wenn Sie einen Datenrahmen mit gemischten Faktor- und numerischen Spalten in ein xts konvertieren, werden alle meine Daten in Zeichenfolgen konvertiert. Dies ist kein Problem mit den Faktoren, aber es ist extrem ärgerlich mit den Zahlen. Gibt es eine Problemumgehung?R: Konvertieren von Datenrahmen (gemischter Faktor und numerisch) nach XTS in R
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"
Idealerweise möchte ich die erste Spalte numerisch bleiben, während die zweite in einen String umgewandelt wird. Die Lösung muss vollständig automatisiert werden, da ich mit Datensätzen mit einer großen Anzahl von Spalten arbeite, und ich kann nicht immer vorhersagen, welche Faktoren und welche numerisch sein werden.
-
Edit:
Ich habe versucht, durch Definieren Sie die folgende Funktion, um dieses Problem zu erhalten:
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, die String-Daten ist konvertiert in NA:
> 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 dies ein bekanntes Problem mit dem XTS-Paket, oder mache ich etwas falsch?
Ah, danke. Ich muss einen Workaround finden. –
Um etwas spezifischer zu sein: Zoo/Xts sind eine Matrix plus ein Indexattribut, und Sie können Typen in einer Matrix nicht mischen. –
Ja, aber dieser OP-Fehler war nicht einmal im Indextyp, sondern die zugrunde liegende Payload, daher mein Kommentar zu der Matrix, woher dieser Fehler stammt. –