После довольно обсуждения в комментариях я смог решить проблему.Хотя переменные Name
выглядели одинаково (и были проанализированы идентично с помощью dput()
), при преобразовании символов в их коды ASCII была небольшая разница:
library(gtools)
asc(sourceA$Name)
Grundschule Kronsberg
[1,] 71
[2,] 114
[3,] 117
[4,] 110
[5,] 100
[6,] 115
[7,] 99
[8,] 104
[9,] 117
[10,] 108
[11,] 101
[12,] 32
[13,] 75
[14,] 114
[15,] 111
[16,] 110
[17,] 115
[18,] 98
[19,] 101
[20,] 114
[21,] 103
asc(sourceB$Name)
Grundschule Kronsberg
[1,] 71
[2,] 114
[3,] 117
[4,] 110
[5,] 100
[6,] 115
[7,] 99
[8,] 104
[9,] 117
[10,] 108
[11,] 101
[12,] 194
[13,] 160
[14,] 75
[15,] 114
[16,] 111
[17,] 110
[18,] 115
[19,] 98
[20,] 101
[21,] 114
[22,] 103
sourceB
имеет дополнительный сравниваемый кодsourceA
и различные значения в позициях 12 и 13. Используя chr()
(также из gtools
), я смог преобразовать коды ASCII в символы:
chr(asc(sourceA$Name))
[1] "G" "r" "u" "n" "d" "s" "c" "h" "u" "l" "e" " " "K" "r" "o" "n" "s" "b" "e" "r" "g"
chr(asc(sourceB$Name))
[1] "G" "r" "u" "n" "d" "s" "c" "h" "u" "l" "e" "Â" " " "K" "r" "o" "n" "s" "b" "e" "r" "g"
В sourceB
, в строке есть дополнительный Â (десятичный код ASCII 194), и пробел закодирован десятичным 160 вместо 32. Я до сих пор не знаю, почему в сочетании эти два кода ASCII отображались как обычный белыйпробел, но смог решить проблему, просто заменив все пробелы на " "
sourceB <- sourceB %>%
mutate(Name = stringr::str_replace_all(Name, "\\p{WHITE_SPACE}", " "))
full_join(sourceA, sourceB, by = "Name")
# A tibble: 1 x 3
Name category value
<chr> <dbl> <dbl>
1 Grundschule Kronsberg 1 2
Это (каким-то образом) изменило коды ASCII так, что теперь они совпадают друг с другом:
chr(asc(sourceB$Name))
[1] "G" "r" "u" "n" "d" "s" "c" "h" "u" "l" "e" " " "K" "r" "o" "n" "s" "b" "e" "r" "g"