2012-08-02 50 views
2

我有兩個data.frames,我想追加在一起。一個data.frame保存過去的數據,另一個data.frame保存未來的預測數據。例如:rbind函數改變我的條目

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),由於某種原因從future data.frame的Period條目都改名。它看起來像:

> 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

您的數據打印方式與存儲方式不同。請提供運行'dput(head(past))','dput(head(future))'和'dput(head(rbind(past,future)))'的結果。 – 2012-08-02 21:05:31

回答

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" 

所以解決的辦法就是要麼

  1. 隱蔽future$Period字符:future$Period <- as.character(future$Period)
  2. 隱蔽past$Period到日期:past$Period <- as.Date(past$Period)

取決於您所需的輸出。

+0

謝謝,你是如何找出數據結構是從我給出的輸出字符?你是否嘗試重新創建它在R? – 2012-08-02 21:33:31

+0

@RayJTong:我不能說你的原始問題中的'Period'是字符,這就是爲什麼我要求'dput'的輸出,'dput'創建了一個R對象的文本表示,可以複製/粘貼到R會話中。如果仔細查看輸出'str(future)',你可以看到'Period'是'chr'。 – 2012-08-02 21:39:41

3

它們不是隨機的。矩陣元素需要沒有屬性,因此,如果強制爲矩陣,因素,日期和POSIXt項目就會成爲它們的數字表示。有一個rbind.data.frame,但你顯然提供了一個對象,最終調用該函數的非data.frame版本。您將需要從兩個參數中提供dput()以獲得更好的答案。

+0

structure(list(Period = c(「2010-01-01」,「2010-02-01」,「2010-03-01」,「2010-04-01」,「2010-05-01」,「 2010-06-01「) structure(list(Period = structure(c(15522,15553,15584,15614,15645,15675),class =」Date「) 看起來像第二個包裹着另一個結構()。無論如何規範化它? – 2012-08-02 21:12:40

+0

其中之一是一個字符向量和另一個是日期分類向量。 – 2012-08-02 23:38:33