Не могу изменить некоторые символы в именах столбцов с помощью gsub, например, ‘?’, ‘ ‘,'(‘

#r

Вопрос:

Я импортировал csv-файл со «странными» символами. Ниже я воспроизвел и пример. Я могу изменить только некоторые символы с помощью gsub. Это не работает для»?», » («и » «. Как я могу их изменить/удалить? Спасибо!

 x lt;- c("Aryl Sulfat/m, ", "4/3-(3_hydroxy) acid", "2- 2acid, 4- acid", "1-acetamido-2-/ sulfate", "acid?") a lt;- 1:2 blt;- 6:7 c lt;- 5:6 d lt;- 8:9 e lt;- 3:4 dlt;- data.frame(a,b,c,d,e) colnames(d) lt;- x d  Aryl Sulfat/m,  4/3-(3_hydroxy) acid 2- 2acid, 4- acid 1-acetamido-2-/ sulfate acid? 1 1 6 5 8 3 2 2 7 6 9 4  colnames(d) lt;- gsub("?", "", colnames(d)) #doesnt work colnames(d) lt;- gsub("-", "", colnames(d)) colnames(d) lt;- gsub("/", "", colnames(d)) colnames(d) lt;- gsub("(", "", colnames(d)) #doesnt work colnames(d) lt;- gsub(")", "", colnames(d)) colnames(d) lt;- gsub(",", "", colnames(d)) colnames(d) lt;- gsub(" ", "", colnames(d)) #doesnt work   Aryl Sulfatm  43(3_hydroxy acid 2 2acid 4 acid 1acetamido2 sulfate acid? 1 1 6 5 8 3 2 2 7 6 9 4  

Ответ №1:

Причина, по которой это не работает, заключается в том, что это специальные символы, которые вы бы использовали внутри регулярного выражения. Вам нужно было бы сократить их.

 gsub("\?", "", colnames(d)) gsub("\(", "", colnames(d)) gsub("\ ", "", colnames(d))  

В любом случае, для вашего случая я бы посоветовал вам использовать что-то подобное. Сохраняйте только цифры, буквы и подчеркивания:

 gsub("[^[:alnum:]^_]", "", colnames(d)) #gt; [1] "ArylSulfatm" "433_hydroxyacid" "22acid4acid" "1acetamido2sulfate" "acid"