繁体   English   中英

R将data.frame转换为每日时间序列对象

[英]R convert a data.frame to a daily time series object

我有我的data.frame这样的东西

  name units_sold order_date
1 obj1         10 2013-09-21
2 obj1         10 2013-09-22
3 obj1         10 2013-09-23
4 obj2        100 2013-09-21
5 obj2        200 2013-09-22
6 obj2        300 2013-09-23
7 obj3         70 2013-09-21
8 obj3        200 2013-09-22
9 obj3         50 2013-09-23

我想将其转换为时间序列对象,使其具有以下格式的值:

       2013-09-21  2013-09-22 2013-09-23
obj1      10            10         10
obj2      100           200        300
obj3      70            200        50

... 一个星期

在R中,多元系列通常由每列而不是行一个序列表示。 使用zoo包可以像这样读取它(为使示例自成一体,我们以字符串形式读取它,但是您想用诸如file="myfile.dat"类的东西替换text=Lines ):

Lines <- "name units_sold order_date
1 obj1         10 2013-09-21
2 obj1         10 2013-09-22
3 obj1         10 2013-09-23
4 obj2        100 2013-09-21
5 obj2        200 2013-09-22
6 obj2        300 2013-09-23
7 obj3         70 2013-09-21
8 obj3        200 2013-09-22
9 obj3         50 2013-09-23
"

library(zoo)
z <- read.zoo(text = Lines, header = TRUE, index = 3, split = 1)

这使:

> z
           obj1 obj2 obj3
2013-09-21   10  100   70
2013-09-22   10  200  200
2013-09-23   10  300   50

从这一点开始,您可以对其进行绘制( plot(z) ),将其转换为ts序列(尽管ts通常不使用每日时间序列as.ts(z) )并执行许多其他操作。 请在同一链接上查看5个Zoo vignettes(pdfs)和Zoo帮助页面。

(请注意,在这种情况下, header=TRUE实际上不是必需的,因为由于剩余的行还有一个字段,即它们具有行名,而第一行却没有行,因此它会指出第一行是标题)

我认为预期的输出不是ts对象。 我理解您的问题是从长格式到宽格式的重塑问题。 这里有两种方法:

reshape2包使用dcast

library(reshape2)
dcast(dat,name~order_date,value.var="units_sold")

 name 2013-09-21 2013-09-22 2013-09-23
1 obj1         10         10         10
2 obj2        100        200        300
3 obj3         70        200         50

使用基础包装的reshape

reshape(dat,direction='wide',idvar='name',timevar='order_date')

 name units_sold.2013-09-21 units_sold.2013-09-22 units_sold.2013-09-23
1 obj1                    10                    10                    10
4 obj2                   100                   200                   300
7 obj3                    70                   200                    50

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM