gpt4 book ai didi

r - dplyr 中的 bind_rows 抛出异常错误

转载 作者:行者123 更新时间:2023-12-04 07:36:27 25 4
gpt4 key购买 nike

希望我不会重复一些以前存在的问题。我正在使用 32 位 Win7 机器,R V=3.2.0,dplyr V=0.4.1,RStudio 0.98.1103。

有问题的文件是读入 vars (x,y/sep = "|", header = TRUE, stringsasFactors = FALSE) 的两个 CSV 文件,它们源自同一个 Oracle 表。用于生成两个文件的查询提取了完全相同的变量(29 个)。

identical(names(x), names(y) > TRUE

但是,当我加载 dplyr 包并尝试使用“bind_rows”作为 dat <- bind_rows(x, y) 时,我收到以下错误:
> bind_rows(x,y)
Error: incompatible type (data index: 2, column: 'rmnumber', was collecting: integer (dplyr::Collecter_Impl<13>), incompatible with data of type: factor
In addition: Warning messages:
1: In rbind_all(list(x, ...)) :
Unequal factor levels: coercing to character
2: In rbind_all(list(x, ...)) :
Unequal factor levels: coercing to character
3: In rbind_all(list(x, ...)) :
Unequal factor levels: coercing to character

我查看了“rmnumber”列,并确认该列中的所有内容都是预期的数字或“NA”,对于表中的 NULL 值也是如此。我也试过 bind_rows(list(x,y)) 并返回相同的错误。

原始的“rbind”在这些变量上工作得很好,没有明显的精度损失。

有没有人看到这个错误?除了使用 rbind 之外,您还有其他潜在的解决方案吗?

谢谢!

#

我认为这没有帮助,但我构建了自己的 dfs,当然 'bind_rows' 工作得非常完美:
> x.df <- data.frame(first_name = c("abc"), last_name = c("def"), rmnum = (1:15), addy = ("some_address"))
> y.df <- data.frame(first_name = c("abc"), last_name = c("def"), rmnum = (1:15), addy = ("some_address"))
> bind_rows(x.df, y.df)
Source: local data frame [30 x 4]

first_name last_name rmnum addy
1 abc def 1 some_address
2 abc def 2 some_address
3 abc def 3 some_address
4 abc def 4 some_address
5 abc def 5 some_address
6 abc def 6 some_address
7 abc def 7 some_address
8 abc def 8 some_address
9 abc def 9 some_address
10 abc def 10 some_address
.. ... ... ... ...

验证 cols 的类
> identical(sapply(x, class), sapply(y, class))
[1] FALSE

> class(x$rmnumber);class(y$rmnumber)
[1] "integer"
[1] "character"

我无法弄清楚为什么它们不同。信息来自完全相同的表,并使用完全相同的代码读入变量。

锁定解决方案

非常感谢@Pascal 帮助我解决了这个问题。一个简单的数据类型转换解决了我的问题:
    y$rmnumber <- as.integer(y$rmnumber)
> dat2 <- bind_rows(x,y)
> dat2
Source: local data frame [99,884 x 24]

最佳答案

错误消息说:“在一个 data.frame 中,'rmnumber' 在类整数中,在另一个 data.frame 中,'rmnumber' 是类因子。我不能将不同的类绑定(bind)在一起”。

让我们用你的例子

x.df <- data.frame(first_name = c("abc"), last_name = c("def"), rmnum = (1:15), addy = ("some_address"))
y.df <- data.frame(first_name = c("abc"), last_name = c("def"), rmnum = (1:15), addy = ("some_address"))

我们检查“x.df”和“y.df”每一列的类:
sapply(x.df, class)
# first_name last_name rmnum addy
# "factor" "factor" "integer" "factor"


sapply(y.df, class)
# first_name last_name rmnum addy
# "factor" "factor" "integer" "factor"

一切都很好,data.frames 之间的类是一致的。现在,让我们将“y.df$rmnum”转换为因子:
y.df$rmnum <- factor(y.df$rmnum)
class(y.df$rmnum)
# [1] "factor"

现在让我们尝试绑定(bind):
bind_rows(x.df, y.df)

Error: incompatible type (data index: 2, column: 'rmnum', was collecting: integer (dplyr::Collecter_Impl<13>), incompatible with data of type: factor



相同的错误信息。因此,在您的一个 data.frame 中,“rmnumber”是整数,而在另一个中,“rmnumber”是一个因素。您必须将分解后的“rmnumber”转换为整数,或相反。

关于r - dplyr 中的 bind_rows 抛出异常错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30203299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com