【问题标题】:unexpected rbind.fill behavior when combining columns of different class组合不同类的列时出现意外的 rbind.fill 行为
【发布时间】:2016-05-03 16:07:49
【问题描述】:

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

【问题讨论】:

    标签: r plyr rbind


    【解决方案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)
    

    【讨论】:

    • 谢谢,很有帮助!我在 read.csv 导入中使用了 stringsAsFactors(以小写字母开头,顺便说一句),现在它可以工作了。 (每次我认为我对 R 中的不同类有更多了解时,就会发生类似的事情,我知道我需要阅读更多......谢谢你的帮助!)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    相关资源
    最近更新 更多