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

时间:2016-09-21 06:09:56

标签: r join data.table dplyr sqldf

数据敏感且无法发布,答案将采用猜测的形式,我将非常满意。

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

联接是这样的:

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

代码执行但我没有得到任何匹配(只有NA:s),这很奇怪,因为这些样本行返回TRUE(应该这样):

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

[1] TRUE

修改

问题本身已经解决,并且与R中的连接如何处理有关。数据中的编码显示为“未知”但仍为UTF-8,而从Excel导入的数据表显式设置为UTF-8。显然可以用不同的(不是真正不同的)编码进行逻辑比较,但不能加入。

用iconv设置编码解决了这个问题。尽管如此,我不明白为什么逻辑比较和联接有很大不同,这对我来说没什么意义。在这里工作可能有些我不明白的事情。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

使用dplyr

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

以基础R

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

应该有用。