如何将堆积的库存数据表转换为SQLite数据库中的面板数据?

时间:2014-02-05 04:03:41

标签: sql database r sqlite reshape

我使用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?

转换数据的好方法

2 个答案:

答案 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)