我编写的代码在高吞吐量的生产环境中运行,期望可以处理来自多个用户的各种输入。在这种环境中,我经常需要使用dplyr连接两个具有不匹配类型的连接列的多列数据帧,从而产生此错误。“由于类型不兼容,无法加入...”
预期生产代码将处理输入csvs,这些csvs是150+列乘0-1000行,具有12-20个连接列。我使用read.table来提高速度,并且由于150列的内容可以变化,因此可以根据数据内容推断类型。
如果有一个通用功能可以以编程方式匹配联接列类型,而无需假设列名称或位置,那将是很好的。
GGA*_*son 12
这是一个经常查看的问题,因此许多其他人必须遇到错误,因此值得更完整的答案。
纠正此连接错误的简单解决方案是简单地改变导致问题的列的类。这可以按如下方式完成:
使用 as.numeric、as.logical 或 as.character 改变列类以匹配。例如:
df2 <- df2 %>%
mutate(column1 = as.numeric(column1))
Run Code Online (Sandbox Code Playgroud)生产环境的解决方案是在所示的 matchColClasses 函数中,它执行以下操作:
重新分配 df2 中的列类以匹配 df1
matchColClasses <- function(df1, df2) {
sharedColNames <- names(df1)[names(df1) %in% names(df2)]
sharedColTypes <- sapply(df1[,sharedColNames], class)
for (n in sharedColNames) {
class(df2[, n]) <- sharedColTypes[n]
}
return(df2)
}
Run Code Online (Sandbox Code Playgroud)该功能在我们的生产环境中运行良好,具有异构数据类型;字符、数字和逻辑。