合并不同 class 的列时的意外 rbind.fill 行为

unexpected rbind.fill behavior when combining columns of different class

我尝试使用 plyr 包中的 rbind.fill 函数将两个数据帧与列 A 组合在一起,该列仅包含第一个数据帧中的数字,但是 (也)第二个数据框中的字符串。可重现的例子:

data1 <- data.frame(A=c(11111,22222,33333), b=c(4444,444,44444), c=c(5555,66666,7777))
data2 <- data.frame(A=c(1234,"ss150",123456), c=c(888,777,666))
rbind.fill(data1,data2)

这产生了以下输出,其中 A 列第 4、5、6 行中的数据不正确。它没有产生错误消息。

        A     b     c
1  107778 33434     6
2 1756756     4     7
3 2324234     5     8
4       2    NA 14562
5       3    NA 45613
6       1    NA    14

我曾预计该函数会将整列强制转换为字符 class,或者至少显示 NA 或警告。相反,它插入了我不理解的数字(在实际文件中,这些是未排序的两位数字)。 documentation没有指定待合并的data.frames中的列必须是同一类型。

我怎样才能得到这个组合?

       A     b     c
1  11111  4444  5555
2  22222   444 66666
3  33333 44444  7777
4   1234    NA   888
5  ss150    NA   777
6 123456    NA   666

看看class(data2$A)。它实际上是一个带有标签向量的整数。在您的 data.frame 创作或 read.csv 和朋友中使用 stringsAsFactors=F。这将强制变量为数字或字符向量。

data1 <- data.frame(A=c(11111,22222,33333), b=c(4444,444,44444), c=c(5555,66666,7777))
data2 <- data.frame(A=c(1234,"ss150",123456), c=c(888,777,666), stringsAsFactors=FALSE)

rbind.fill(data1,data2)