我有两个我想要一起追加的data.frames。一个data.frame保存过去的数据,另一个data.frame保存未来的预计数据。例如:
past <- structure(list(Period = c("2010-01-01", "2010-02-01", "2010-03-01",
"2010-04-01", "2010-05-01", "2010-06-01"), Count = c(3379221317,
3379221317, 3791458246, 4182424930, 4891432401, 5116360744)),
.Names = c("Period", "Count"), row.names = c(NA, 6L), class = "data.frame")
future <- structure(list(Period = structure(c(15522, 15553, 15584, 15614,
15645, 15675), class = "Date"), Count = c(11051746713.9419, 11385578654.4160,
10864084232.2216, 11336164255.3271, 11121729107.9691, 12321341701.3780)),
.Names = c("Period", "Count"), row.names = c(NA, 6L), class = "data.frame")
我使用了rbind(past,future)
,由于某种原因,Period
data.frame中的future
条目都被重命名。它看起来像:
> rbind(past,future)
Period Count
1 2010-01-01 3379221317
2 2010-02-01 3379221317
3 2010-03-01 3791458246
4 2010-04-01 4182424930
5 2010-05-01 4891432401
6 2010-06-01 5116360744
7 15522 11051746714
8 15553 11385578654
9 15584 10864084232
10 15614 11336164255
11 15645 11121729108
12 15675 12321341701
为什么我的日期会重命名为随机数?
答案 0 :(得分:4)
从dput(past)
的输出中可以看出,past$Period
是字符,而不是日期。 str(past)
和str(future)
会告诉你他们与众不同。
> str(past)
'data.frame': 6 obs. of 2 variables:
$ Period: chr "2010-01-01" "2010-02-01" "2010-03-01" "2010-04-01" ...
$ Count : num 3.38e+09 3.38e+09 3.79e+09 4.18e+09 4.89e+09 ...
> str(future)
'data.frame': 6 obs. of 2 variables:
$ Period: Date, format: "2012-07-01" "2012-08-01" ...
$ Count : num 1.11e+10 1.14e+10 1.09e+10 1.13e+10 1.11e+10 ...
data.frame列中的所有元素必须是相同的类型,因此future$Period
列会被转换...不确定为什么它无法正确转换,因为:
> as.character(future$Period)
[1] "2012-07-01" "2012-08-01" "2012-09-01" "2012-10-01"
[5] "2012-11-01" "2012-12-01"
所以解决方案是 :
future$Period
隐藏为角色:future$Period <-
as.character(future$Period)
past$Period
到日期:past$Period <-
as.Date(past$Period)
取决于您所需的输出。
答案 1 :(得分:3)
它们不是随机的。矩阵元素必须没有属性,因此如果强制转换为矩阵,则因子,Dates和POSIXt项将成为其数字表示。有rbind.data.frame
,但您显然提供了rbind
一个对象,该对象最终调用该函数的非data.frame版本。您需要从两个参数中提供dput()以获得更好的答案。