即使逻辑比较为真,加入 R 也会失败

Join in R fails even though logical comparisons are true

数据敏感,不能公开,答案将以猜测的形式出现,我会很高兴。

我正在尝试将较大的 data.table 与较小的 data.table 合并,并更新一些值。较小的是通过 XLConnect 从 Excel 电子表格加载的。

连接是这样的:

d.tmp2 <- left_join(d.main, d.wb, by = c("Nr" = "Nr"))

代码执行但我没有得到任何匹配项(仅 NA:s),这很奇怪,因为这些示例行 returns TRUE(应该如此):

d.wb[1]$Nr == d.main[39]$Nr

[1] TRUE

编辑:

问题已自行解决,并且与 R 中的连接处理方式有关。数据中的编码显示为 "Unknown" 但仍然是 UTF-8,而从 Excel 导入的数据 table 明确设置为 UTF-8。 Apperently 可以对不同(不是真正不同)的编码进行逻辑比较,但不能进行连接。

使用 iconv 设置编码解决了这个问题。尽管如此,我还是不明白为什么逻辑比较和连接会有如此大的不同,这对我来说毫无意义。可能有一些我不明白在这里工作的地方。

与 dplyr

d.tmp2 <- left_join(d.main, d.wb, by = "Nr")

带基数 R

d.tmp2 <- merge(d.main, d.wb, by = "Nr")

应该可以。

经过 som 测试后我找到了答案,我不得不在 d.main 中创建一个新列,再次使用 iconv 转换为 UTF-8,然后加入新变量。然后就成功了。

所以错误与编码有关,但我仍然不明白为什么逻辑比较的结果和 dplyr 的连接如此不同...