2016-09-21 60 views
-3

數據很敏感並且無法發佈,答案將以猜測的形式出現,我將非常滿意。即使邏輯比較爲真,加入R仍然失敗

我想加入一個較小的更大的data.table,並更新一些值。較小的是通過XLConnect從Excel電子表格加載的。

聯接是這樣的:

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

的代碼執行了,但我沒有得到任何比賽(僅NA:秒),這是奇怪的,因爲這些樣本行返回TRUE(因爲它應):

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

[1] TRUE 

編輯:

這個問題本身就解決了,並且與R中的連接如何處理有關。數據中的編碼顯示爲「未知」,但仍爲UTF-8,而從Excel導入的數據表已明確設置爲UTF-8。顯然,可以用不同的(不是非常不同的)編碼進行邏輯比較而不是連接。

用iconv設置編碼解決了這個問題。儘管如此,我不明白爲什麼邏輯比較和聯接有很大的不同,這對我來說毫無意義。可能有些事我不明白在這裏工作。

+0

如果我們不能[複製](HTTP:// stackoverflow.com/questions/5963269),這只是猜測。 – zx8754

+0

@ zx8754是的,我知道,但我不明白我如何重現它。 1)數據是敏感的,我不能公開發布 2)數據和系統可能需要準確再現是它,這不可能 所以我高興地解決猜測 - 我猜測與編碼的東西。它通常是當R中的錯誤很奇怪時。 – ErrantBard

+0

我實際上在下面得到了一個解決方案。我不得不使用iconv在'd.main'中將編碼重新設置爲UTF-8,然後連接工作。我猜這個邏輯比較對編碼來說比較挑剔,而連接是? 'd.wb [1]'實際上返回第1行,'d.wb'的str返回不同的列和它們的值,以及它應該返回的其餘值 – ErrantBard

回答

1

經過som測試後,我找到了答案,我不得不在d.main中創建一個新列,再次使用iconv轉換爲UTF-8,然後加入新變量。然後它工作。

因此錯誤是與編碼,但我仍然不明白爲什麼從邏輯比較和dplyr的連接的結果是如此不同......

0

與dplyr

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

與基礎R

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

應該工作。

+0

是的,我知道 - 它應該可以工作,但事實並非如此。這是讓我感到 - 是比dplyr或base連接更不敏感的邏輯比較,我只是嘗試明確地設置其中的一些,並且工作得很好(d.main [Nr == d.wb [19] $ Nr,var_a: =新值]) – ErrantBard