將具有混合因子和數字列的數據幀轉換爲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軟件包的已知問題,或者難道我做錯了什麼?
啊,謝謝。我必須找到解決方法。 – 2010-12-17 14:36:19
更具體一些:zoo/xts是一個矩陣加一個索引屬性,並且不能混合矩陣中的類型。 – 2010-12-17 14:44:44
是的,但是這個OP的錯誤一次不是索引類型,而是底層的有效載荷,因此我對這個錯誤起源的矩陣發表了評論。 – 2010-12-17 15:10:37