我正在做一些时间序列操作,我将一些日期向量重新整形为矩阵元素,以便进行进一步处理。但出于某种原因,我似乎无法将日期类重新应用于矩阵或数据框格式。
让
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"
关于我缺少的任何想法?
答案 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)))