我的数据框如下:
> 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
任何人都可以帮我弄清楚发生了什么,我该如何避免这个错误。 感谢。
答案 0 :(得分: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