3

我的数据框如下:

> 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 时,出现以下错误

> rbind(t,t)
Error in NextMethod() : invalid value

但是当我尝试直接重新创建数据框时,我没有收到该错误:

> 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

谁能帮我弄清楚发生了什么以及如何避免这个错误。谢谢。

4

1 回答 1

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
于 2013-04-29T22:23:40.897 回答