2013-04-29 48 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

相关问题