R:Rのデータフレーム(混合係数と数値)をXTSに変換する
質問
混合係数と数値列を備えたデータフレームをXTSに変換すると、すべてのデータが文字列に変換されます。これは要因の問題ではありませんが、数字では非常に迷惑です。回避策はありますか?
例えば:
> 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"
理想的には、最初の列を数値のままにしたいのですが、2番目の列は文字列に変換されます。私は多数の列を使用してデータセットを操作しているため、ソリューションを完全に自動化する必要があり、どの列が要因であり、どれが数値であるかを常に予測することはできません。
--
編集:
次の関数を定義することにより、この問題を回避しようとしました。
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)
}
ただし、2つのXTSオブジェクトをマージすると、文字列データはNASに変換されます。
> 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
これはXTSパッケージの既知の問題ですか、それとも私は何か間違ったことをしていますか?
解決
XTSには数値行列が必要であるため、これを行うことはできません。
他のヒント
それは設計による制限です。 XTSまたは動物園は基本的にマトリックスプラスインデックスであることに注意してください。データフレームとインデックスではありません。
所属していません StackOverflow