2013-04-29 81 views
2

我的數據幀如下:Rbind拋出錯誤:無效值

> t 
    Day TestID VarID 
1 2013-04-27 Total Total 

> str(t) 
'data.frame': 1 obs. of 3 variables: 
$ Day : Date, format: "2013-04-27" 
$ TestID: factor [1, 1] Total 
    ..- attr(*, "levels")= chr "Total" 
$ VarID : Factor w/ 3 levels "0|0","731|18503",..: 3 

當我嘗試做一個rbind我收到以下錯誤

​​

但是當我嘗試直接重新創建數據幀我沒有得到這個錯誤:

> t <- data.frame(Day = as.Date("2013-04-27"),TestID = "Total", VarID = "Total") 
> t 
    Day TestID VarID 
1 2013-04-27 Total Total 
> str(t) 
'data.frame': 1 obs. of 3 variables: 
$ Day : Date, format: "2013-04-27" 
$ TestID: Factor w/ 1 level "Total": 1 
$ VarID : Factor w/ 1 level "Total": 1 
> rbind(t,t) 
    Day TestID VarID 
1 2013-04-27 Total Total 
2 2013-04-27 Total Total 

誰能幫助我弄清楚是怎麼回事,我怎麼能避免THI錯誤。 謝謝。

+1

你可以在'rbind'不工作的數據幀的版本上提供'dput()'的輸出嗎? – joran 2013-04-29 22:17:16

+0

感謝您提供dput。我將在未來使用它。目前,這個問題已經解決。謝謝。 – 2013-04-30 16:41:01

回答

4

的主要區別我看到的是,在第一版本的TestID變量是factor [1, 1](矩陣),而不是Factor(載體)

第一版:

t1 <- data.frame(Day = as.Date("2013-04-27"), 
       TestID = "Total", VarID = "Total") 
rbind(t1,t1) 

轉換到第二版本:

t2 <- t1 
dim(t2$TestID) <- c(1,1) 
str(t2$TestID) 
## factor [1, 1] Total 
## - attr(*, "levels")= chr "Total" 
rbind(t2,t2) 
## Error in NextMethod() : invalid value 

修復錯位版本:

t3 <- t2 
t3$TestID <- drop(t3$TestID) 
rbind(t3,t3) ## works 
+0

謝謝,這解決了這個問題。我現在在rbind之前的兩個數據幀上應用drop。仍然不清楚發生了什麼事? – 2013-04-30 16:43:03

+0

我們將不得不更多地瞭解數據框架是如何構建的,以回答這個問題......一般來說,數據框架不包含矩陣,但它們可以使用'I()'(從'? data.frame':如果列表或數據框架或矩陣被傳遞給'data.frame',就好像每個組件或列都作爲單獨的參數被傳遞(除了''model.matrix''類的矩陣和那些受'I'保護的),或者通過手動將列表的'class'設置爲'data.frame' ... – 2013-04-30 17:50:08

相關問題