Удалить специальные символы из фрейма данных

У меня есть матрица, содержащая строку «Энергия на мкм». Перед буквой «м» стоит ромбовидный символ со знаком вопроса — я не знаю, что это такое.

Я попытался избавиться от этого, используя это в столбце матрицы:

a=gsub('Energy per �m','',a) 

[и использовать копирование/вставку для первого члена gsub], но это не работает. [неожиданный символ в "a=rep(5,Energy per"]. Когда я пытаюсь извлечь что-то из исходной матрицы с помощью grepl, я получаю :

46: In grepl("ref. value", raw$parameter) :
input string 15318 is invalid in this locale

Как я могу избавиться от всех этих знаков? Я хотел бы иметь только 0-9, AZ, az, / и '. Остальное можно забить.


person Henk    schedule 15.08.2012    source источник


Ответы (1)


Вероятно, есть лучший способ сделать это, чем с регулярным выражением (например, путем изменения Encoding).

Но вот ваше регулярное выражение:

gsub("[^0-9A-Za-z///' ]", "", a)
[1] "Energy per m"

Но, как указал @JoshuaUlrich, вам лучше использовать:

gsub("[^[:alnum:]///' ]", "", x)
[1] "Energy per m"
person Andrie    schedule 15.08.2012
comment
[^[:alnum:]] предпочтительнее [^0-9A-Za-z]. Что касается последних, ?regex говорит, что поскольку их интерпретация зависит от локали и реализации, их лучше избегать. и Например, [[:alnum:]] означает [0-9A-Za-z], за исключением того, что последнее зависит от локали и кодировки символов, тогда как первое не зависит от локали и набора символов. - person Joshua Ulrich; 15.08.2012
comment
Спасибо. Я знаю это только из-за того, что меня ругали за использование вашего первого решения в пакете. ;-) - person Joshua Ulrich; 15.08.2012
comment
Спасибо! Андри, оказалось, что мне нужно больше символов, например .,()-? и пространство. Расширение регулярного выражения или замена его на [:alnum:]] или [[:print:]] дало странные результаты. Самым простым решением действительно было использовать кодирование через iconv. Это работало только после перевода столбца из множителя в символ. Фу... - person Henk; 15.08.2012
comment
@ user580110 Не хотите ли опубликовать свое решение iconv? Я попробовал несколько перестановок, но не смог заставить его работать. - person Andrie; 15.08.2012
comment
Ах, и виновником был знак евро. Установка неправильной кодировки приводит к стиранию параметров. Latin1 просто оставляет пустое место. - person Henk; 15.08.2012
comment
# удалить непечатаемые символы raw$parameter=as.character(raw$parameter); raw$parameter=icon(raw$parameter,'Latin-9') - person Henk; 06.11.2012