2016-02-28 93 views
-1

我有我试图转换成XTS格式的数据:如何将矩阵与刻度数据转换为xts?

> dput(data) 
structure(list(50370788L, 50370777L, 50370694L, 50370620L, 50370504L, 
    620639L, 620639L, 592639L, 592639L, 592639L, "2015-10-24", 
    "2015-10-24", "2015-09-04", "2015-09-04", "2015-09-04", structure(list(
     id = 12544L, symbol = "GBSN", title = "Great Basin Scientific, Inc."), .Names = c("id", 
    "symbol", "title"), class = "data.frame", row.names = 1L), 
    structure(list(id = 12544L, symbol = "GBSN", title = "Great Basin Scientific, Inc."), .Names = c("id", 
    "symbol", "title"), class = "data.frame", row.names = 1L), 
    structure(list(id = 12544L, symbol = "GBSN", title = "Great Basin Scientific, Inc."), .Names = c("id", 
    "symbol", "title"), class = "data.frame", row.names = 1L), 
    structure(list(id = 12544L, symbol = "GBSN", title = "Great Basin Scientific, Inc."), .Names = c("id", 
    "symbol", "title"), class = "data.frame", row.names = 1L), 
    structure(list(id = 12544L, symbol = "GBSN", title = "Great Basin Scientific, Inc."), .Names = c("id", 
    "symbol", "title"), class = "data.frame", row.names = 1L), 
    "$GBSN Still sticking with my prediction of FDA coming sometime in March..", 
    "$GBSN Last time I check NASDAQ gave them till sometime in April to get it together or else they'll see pink. Correct me if in wrong?", 
    "$GBSN time for retailers to get knocked out of the ring with a 25 to 30 % gain", 
    "$GBSN market cap will end up around 65 million not enough to comply rs takes it to 21 dollars pps 26$ by august", 
    "$GBSN shorts are going to attack the sell off"), .Dim = c(5L, 
5L), .Dimnames = list(c("2016-02-28 16:59:53", "2016-02-28 16:58:58", 
"2016-02-28 16:51:36", "2016-02-28 16:46:09", "2016-02-28 16:34:34" 
), c("GBSN.Message_ID", "GBSN.User_ID", "GBSN.User_Join_Date", 
"GBSN.Message_Symbols", "GBSN.Message_Body"))) 

我一直在尝试使用:

Message_series <- xts(zoo(data, format='%Y-%m-%d %H:%M:%S')) 

我得到这个错误:

Error in zoo(data, format = "%Y-%m-%d %H:%M:%S") : 
    unused argument (format = "%Y-%m-%d %H:%M:%S") 

回答

0

你矩阵不整齐。看看第四列(data[,4])。动物园,因此xts不支持如此复杂的对象只有简单的矩阵与所有元素在同一类型。

第一栏和第二栏都可以。他们继承了列表属性,所以转换并不那么简单。

data.mat <- matrix(as.numeric(data[,1:2]), ncol = 2) 
colnames(data.mat) <- colnames(data)[1:2] 
xts(data.mat, order.by = as.POSIXct(rownames(data))) 

加入数据可以转换,其中包括:

data.mat <- cbind(data.mat, as.numeric(as.Date(as.character(data[,3])))) 
colnames(data.mat) <- colnames(data)[1:3] 
data.xts <- xts(data.mat, order.by = as.POSIXct(rownames(data))) 

和可转换回:

as.Date(coredata(data.xts['2016-02-28 16:59:53',3])) 

你也能以同样的方式代码Message_Symbols变量idsymboltitle

我建议您将Message_Body存储在单独的对象(如data.frame)中。

0

根据列名称data,看起来您的所有数据都是或可能是字符类型。但是,data[,4],GBSN.Message_Symbols包含列表,而不是原子向量,因此我们必须使用rbind来展平。然后使用apply将每列转换为字符向量并组合以形成字符矩阵。 xts对象是通过将rownames转换为POSIX日期/时间类型并将它们用作索引而形成的。代码看起来像

# flatten list data in column 4 to a data frame 
    mat4 <- do.call(rbind, data[,4]) 
# convert all data to character type 
    data.mat <- apply(cbind(data[,-4], mat4), 2, as.character)  
# create xts time series 
    data.xts <- xts(data.mat, order.by = as.POSIXct(rownames(data)))