Как я могу сделать эти визуально идентичные строки вычислительно равными? - PullRequest
0 голосов
/ 30 октября 2019

Контекст:

Я хочу объединить два тиббла на основе символьного вектора, но что-то произошло между write.csv() и read.csv(), что сделало их неэквивалентными. В представленном ниже примере str_cmp() возвращает 0 («соответствие»), но в моем реальном проекте он возвращал -1 (строки не сопоставимы). Я не знаю, почему это изменилось.

В любом случае str_cmp() не слишком полезен для меня, потому что dplyr::left_join объединяет равные значения и не может работать с функцией.

Как мне изменить одну из этих строк, чтобы str1==str2 вернул TRUE? Мне нужно иметь возможность сделать это для всего вектора символов, чтобы я мог сделать:

dplyr::left_join(tibble1,tibble2,by = c("charVector1"="charVector2"), где charVector1 и charVector2 - это столбцы, из которых были извлечены str1 и str2.

Представляет:

#DL 19/10/30
## Tryna work out why these strings aren't the same
#####################################################################

#Get strings from GitHub repo ---------------------------------------
read.table(
  "https://raw.githubusercontent.com/davelovellCARU/stringHelp/master/string1.txt"
) ->
  str1

read.table(
  "https://raw.githubusercontent.com/davelovellCARU/stringHelp/master/string2.txt"
) ->
  str2

# The strings are not equal -----------------------------------------
str1 == str2
#>       x
#> 1 FALSE
# But they look the same and the computer knows it ------------------
stringi::stri_cmp(str1, str2)
#> [1] 0

Создано в 2019-10-30 пакетом prex (v0.3.0)

1 Ответ

0 голосов
/ 30 октября 2019

Понял!

Есть замечательная функция, которая делает это: stringclean::replace_non_ascii(string) Я запустил его на обеих строках, и теперь они одинаковые. Просто забей на мутирование, и тибблы присоединятся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...