【发布时间】:2015-05-03 17:18:29
【问题描述】:
如果我有两个具有相同列名的 data.frame,我可以使用 rbind 来制作一个数据框。但是,如果我有一个是一个因素,另一个是一个 int,我会收到这样的警告:
警告信息:在
[<-.factor(*tmp*, ri, value = c(1L, 1L, 0L, 0L, 0L, 1L, 1L, : 无效因子水平,NA产生
以下是问题的简化:
t1 <- structure(list(test = structure(c(1L, 1L, 2L, 1L, 1L, 1L, 1L,
1L, 1L, 2L), .Label = c("False", "True"), class = "factor")), .Names = "test", row.names = c(NA,
-10L), class = "data.frame")
t2 <- structure(list(test = c(1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L
)), .Names = "test", row.names = c(NA, -10L), class = "data.frame")
rbind(t1, t2)
对于单列,这很容易理解,但当它是十几个或更多因素的一部分时,就很难理解了。警告信息告诉我要看哪一列?除此之外,了解哪一列出错的好方法是什么?
【问题讨论】:
-
class(t1$test)是factor和class(t2$test)是integer。尝试将t2$test也变成因素。 -
谢谢帕斯卡。如果这是更大结构的一部分,我怎么知道它是“测试”列?我最初发现它有 18 列,想知道如何简单地找出哪一列变成一个因子。
-
你需要比较
sapply(t1, class)和sapply(t2, class)我猜,如果t1和t2有相同的列数和相同的列名。 -
@Pascal - 您可能还想在
sapply-ing 之前对列名进行排序。rbind可以处理无序的名称,但比较将不会对齐 - 例如:sapply(one[sort(colnames(one))],class) -
@thelatemail 是的,很抱歉没有花时间详细说明。