组合不同类的列时出现意外的rbind.fill行为

时间:2016-05-03 16:07:49

标签: r plyr rbind

我尝试使用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

我曾预料到该函数会将整个列强制转换为字符类,或者至少显示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

1 个答案:

答案 0 :(得分:1)

查看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)