我使用R来分析存储在SQLite数据库中的库存数据。目前库存数据是每日的,并且堆叠如下:
Code,Date,Price
A,2013-05-01,100
A,2013-05-02,102
A,2013-05-03,101
...
B,2013-05-01,53
B,2013-05-02,55
B,2013-05-03,56
...
C,2013-05,02,56
C,2013-05-03,51
...
我需要将堆叠数据转换为如下所示:
Date,A,B,C,...
2013-05-01,100,53,NULL,...
2013-05-02,102,55,56,...
2013-05-03,101,56,51,...
有没有一种通过SQL或R?
转换数据的好方法答案 0 :(得分:2)
以下是R中的两个选项,一个使用基本R,另一个使用“reshape2”包。假设您已将数据读入名为“mydf”的R data.frame
:
reshape(mydf, idvar="Date", timevar="Code", direction = "wide")
# Date Price.A Price.B Price.C
# 1 2013-05-01 100 53 NA
# 2 2013-05-02 102 55 56
# 3 2013-05-03 101 56 51
library(reshape2)
dcast(mydf, Date ~ Code, value.var="Price")
# Date A B C
# 1 2013-05-01 100 53 NA
# 2 2013-05-02 102 55 56
# 3 2013-05-03 101 56 51
答案 1 :(得分:0)
这将创建一个动物园时间序列对象,每个库存一列:
library(RMySQL)
library(zoo)
# read table from database
con <- dbConnect(MySQL(), ...whatever...)
DF <- dbGetQuery(con, "select * from stocks")
# reshape it and create a multivariate time series from it
z <- read.zoo(DF, split = 1, index = 2)