Удаление неразрывных пробелов в R
У меня есть датафрейм с несколькими столбцами и более 50 КБ наблюдений. Назовем его df1. Одна из переменных - PLATES (обозначается здесь как "y"), которая содержит номера автобусов в городе. Я хочу сопоставить этот фрейм данных с другим (df2), где у меня также есть данные о пластинах. Я хочу вести только соответствующие записи. Глядя на данные в df1, которые поступают из файла CSV, я понял, что для y в нескольких наблюдениях были символы перед номером пластины, которые соответствуют неразрывному пробелу. Как мне от этого избавиться, чтобы это не было проблемой при сопоставлении. Вот код, который поможет проиллюстрировать. Допустим, у вас есть 5 номеров:
y <- c(0740170, 0740111, 0740119, 0740115, 0740048)
Но при дальнейшем осмотре
view(y)
Вы видите следующее
<c2><a0>0740170
<c2><a0>0740111
<c2><a0>0740119
<c2><a0>0740115
<c2><a0>0740048
Я пробовал это из этого сообщения https://blog.tonytsai.name/blog/2017-12-04-detecting-non-breaking-space-in-r/, но не сработало
y <- gsub("\u00A0", " ", y, fixed = TRUE)
Буду признателен за вашу помощь в решении этой проблемы. Благодарность!
2 ответа
Не совсем уверен, что это поможет, поскольку я не могу проверить свой ответ (так как не могу воссоздать вашу проблему). Но если неразрывные пробелы одновременно являются символами, отличными от ASCII, тогда решение будет следующим:
y <- gsub("[^ -~]+", "", y)
Шаблон соответствует любым символам, отличным от ASCII, и при замене им присваивается значение null. Надеюсь это поможет
Другой ответ соответствует любому символу, отличному от ASCII, но что, если вам нужно сохранить символы, отличные от ASCII, например, буквы с диакритическими знаками? В этой ситуации я хотел специально сопоставить неразрывный пробел типа<c2><a0>
как в вопросе. Что сработало для меня, так это совпадение\xa0
test # nbsp between type and II
# [1] "Diabète de type II"
tools::showNonASCII(test)
# 1: Diab<c3><a8>te de type<c2><a0>II
# other answer
gsub("[^ -~]+", " ", test) # has missing è
# [1] "Diab te de type II"
tools::showNonASCII(gsub("[^ -~]+", " ", test))# no output as no non-ascii chars left
gsub("\xa0+", " ", test)
# [1] "Diabète de type II"
tools::showNonASCII(gsub("\xa0+", " ", test)) # the <c2><a0> nbsp is replaced
# 1: Diab<c3><a8>te de type II