gpt4 book ai didi

R 错误 "Can' t join on ... 因为类型不兼容”

转载 作者:行者123 更新时间:2023-12-04 15:17:56 26 4
gpt4 key购买 nike

我编写了在高吞吐量生产环境中运行的代码,预计可以处理来自多个用户的各种输入。在这种环境中,我经常需要连接(使用 dplyr)两个多列数据帧,其中连接类型不匹配的列会产生此错误。 “无法加入……因为类型不兼容”

生产代码预计将处理 150 多列乘以 0-1000 行的输入 csv,并具有 12-20 个连接列。我使用 read.table 来提高速度,并且因为 150 列的内容可能会有所不同,所以允许通过数据内容推断类型。

拥有一个以编程方式匹配连接列类型的通用函数会很棒,不对列名或位置做任何假设。

最佳答案

这是一个经常查看的问题,因此许多其他人必须遇到错误,因此值得更完整的答案。

纠正此连接错误的简单解决方案是简单地改变导致问题的列的类。这可以按如下方式完成:

  • 瞥见要加入的数据帧中的列类
  • 使用 as.numeric、as.logical 或 as.character 改变列类以匹配。例如:
    df2 <- df2 %>%  
    mutate(column1 = as.numeric(column1))

  • 生产环境的解决方案是在所示的 matchColClasses 函数中,它执行以下操作:
  • 识别共享相同名称的列 (sharedColNames)
  • 使用主数据框 (df1) 识别共享列类
  • 重新分配 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)
    }

  • 该功能在我们的生产环境中运行良好,具有异构数据类型;字符、数字和逻辑。

    关于R 错误 "Can' t join on ... 因为类型不兼容”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49215193/

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