将日期索引重新整形为日期数据框

时间:2014-10-11 02:31:14

标签: r date reshape

我正在做一些时间序列操作,我将一些日期向量重新整形为矩阵元素,以便进行进一步处理。但出于某种原因,我似乎无法将日期类重新应用于矩阵或数据框格式。

idx <- as.Date(seq(20),format="%Y-%m-%d",origin="1970-01-01")
idx.m <- matrix(idx,nrow=5,ncol=4)

给出

  > idx.m
     [,1] [,2] [,3] [,4]
[1,]    1    6   11   16
[2,]    2    7   12   17
[3,]    3    8   13   18
[4,]    4    9   14   19
[5,]    5   10   15   20

我转换为数据框来保存日期对象。

idx.df <- data.frame(idx.m)

如果我尝试某些类型的申请,我似乎无法取回日期格式。

> apply(idx.df,1,as.Date)
   [,1] [,2] [,3] [,4] [,5]
X1    1    2    3    4    5
X2    6    7    8    9   10
X3   11   12   13   14   15
X4   16   17   18   19   20

即使信息在矩阵翻译中丢失,我仍然可以转换回日期。

我已经尝试了其他一些方法,我可以发誓我过去能做到这一点。 有没有办法从上面开始使用索引向量,重塑它,然后结束 使用数据框(我不认为矩阵可以保存日期,但字符)维护日期属性的日期?

我可以用这种方式手动构建数据框

> idx.a <- idx[1:10]
> idx.b <- idx[11:20]
> data.frame(idx.a,idx.b)
        idx.a      idx.b
1  1970-01-02 1970-01-12
2  1970-01-03 1970-01-13
3  1970-01-04 1970-01-14
4  1970-01-05 1970-01-15
5  1970-01-06 1970-01-16
6  1970-01-07 1970-01-17
7  1970-01-08 1970-01-18
8  1970-01-09 1970-01-19
9  1970-01-10 1970-01-20
10 1970-01-11 1970-01-21
> class(data.frame(idx.a,idx.b))
[1] "data.frame"
> sapply(data.frame(idx.a,idx.b),class)
 idx.a  idx.b 
"Date" "Date" 

关于我缺少的任何想法?

  • 也许我应该补充一点,我的目的是对重新整形的数据内容进行大量的矩阵操作,但我希望能够通过行,列索引稍后检索相应的(Date类)索引值。

1 个答案:

答案 0 :(得分:4)

试试这个:

idx <- as.Date(seq(20),format="%Y-%m-%d",origin="1970-01-01")
idx.m <- idx
dim(idx.m) <- c(5, 4)

is.matrix(idx.m)
## TRUE

你可以得到一个细胞,例如id.m[2, 3],一列,例如idx.m[, 2]等,但不是一切都会按预期工作。 print(idx.m)会将其打印出来,就好像它是一个向量,即使它是一个矩阵,而as.data.frame.matrix(idx.m)会将其转换为数据框,但会剥离"Date"类留下数字。

如果您确实想将其转换为数据框,则必须解决这些限制:

DF <- as.data.frame.matrix(idx.m)
DF[] <- lapply(DF, as.Date, origin = "1970-01-01")

do.call(data.frame, split(idx.m, col(idx.m)))