2010-12-17 57 views
4

混合係数と数値の列を持つデータフレームをxtsに変換すると、すべてのデータが文字列に変換されます。これは要因には問題ありませんが、数値には非常に迷惑です。回避策はありますか?例えばR:データフレーム(混合係数と数値)をXTSに変換するR

は:

> 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" 

は、理想的には私は、第二は、文字列に変換されながら、最初の列は、数値のままにしておきたいです。ソリューションは完全に自動化する必要があります。私は多数のカラムを持つデータセットを扱っているため、どのフィールドが因子か数値かを常に予測することはできません。

-

編集:

私は次の関数を定義することでこの問題を回避しようとしました:

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オブジェクトをマージする際に、文字列データがありますNACに変換されました:

> 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パッケージで既知の問題ですか、または私は何か間違っているのですか?

答えて

6

xtsに数値行列が必要なので、これを行うことはできません。

+0

ああ、ありがとう。私は回避策を見つける必要があります。 –

+2

もう少し具体的にする:zoo/xtsは行列とインデックス属性であり、行列に型を混在させることはできません。 –

+0

はい、このOPのエラーは、一度インデックスタイプではなく、基礎となるペイロードです。したがって、このエラーが発生したマトリックスに関するコメントです。 –

3

これは設計上の制限です。 xtsや動物園は基本的に行列とインデックスのことです。データフレームプラスインデックスではありません。

関連する問題