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