合并不同 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)
我尝试使用 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)