2010-12-17 64 views
4

將具有混合因子和數字列的數據幀轉換爲xt時,我的所有數據都轉換爲字符串。這不是因素造成的問題,但它對數字非常惱人。有沒有解決方法?R:將數據幀(混合因子和數字)轉換爲R中的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" 

理想我想的第一列保持數字,而第二個被轉換爲字符串。解決方案需要完全自動化,因爲我正在處理大量列的數據集,而且我不能總是預測哪些是因素,哪些是數字。

-

編輯:

我試圖通過定義下面的函數來解決這個問題:

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) 

} 

但合併兩家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軟件包的已知問題,或者難道我做錯了什麼?

回答

6

你不能這樣做,因爲xts需要一個數字矩陣。

+0

啊,謝謝。我必須找到解決方法。 – 2010-12-17 14:36:19

+2

更具體一些:zoo/xts是一個矩陣加一個索引屬性,並且不能混合矩陣中的類型。 – 2010-12-17 14:44:44

+0

是的,但是這個OP的錯誤一次不是索引類型,而是底層的有效載荷,因此我對這個錯誤起源的矩陣發表了評論。 – 2010-12-17 15:10:37

3

這是一個設計限制。請記住xts或動物園基本上是一個矩陣加索引。不是數據框加索引。