Удалить из строки все, кроме выбранных символов - PullRequest
3 голосов
/ 08 февраля 2011

Я хочу удалить из строки все символы, которые не являются цифрами, знаками минус или десятичными точками.

Я импортировал данные из Excel, используя read.xls, которые содержат некоторые странные символы.Мне нужно преобразовать их в числовые.Я не слишком знаком с регулярными выражениями, поэтому мне нужен более простой способ сделать следующее:

excel_coords <- c(" 19.53380Ý°", " 20.02591°", "-155.91059°", "-155.8154°")
unwanted <- unique(unlist(strsplit(gsub("[0-9]|\\.|-", "", excel_coords), "")))
clean_coords <- gsub(do.call("paste", args = c(as.list(unwanted), sep="|")), 
                     replacement = "", x = excel_coords)

> clean_coords
[1] "19.53380"   "20.02591"   "-155.91059" "-155.8154" 

Бонус, если кто-то может сказать мне, почему эти символы появились в некоторых моих данных (знаки степени являютсяоригинального листа Excel, но другие нет).

Ответы [ 3 ]

5 голосов
/ 08 февраля 2011

Коротко и сладко. Благодаря комментарию Г. Гротендика.

gsub("[^-.0-9]", "", excel_coords)

С http://stat.ethz.ch/R-manual/R-patched/library/base/html/regex.html: "Класс символов - это список символов, заключенный между [и], который соответствует любому отдельному символу в этом списке; если только первый символ списка не является символом ^, когда он соответствует любому символу нет в списке. "

2 голосов
/ 08 февраля 2011

Также можно сделать, используя strsplit, sapply и paste и индексируя правильные символы вместо неправильных:

 excel_coords <- c(" 19.53380Ý°", " 20.02591°", "-155.91059°", "-155.8154°")
 correct_chars <- c(0:9,"-",".")
 sapply(strsplit(excel_coords,""), 
          function(x)paste(x[x%in%correct_chars],collapse=""))

[1] "19.53380"   "20.02591"   "-155.91059" "-155.8154" 
1 голос
/ 08 февраля 2011
gsub("(.+)([[:digit:]]+\\.[[:digit:]]+)(.+)", "\\2", excel_coords)
[1] "9.53380" "0.02591" "5.91059" "5.8154" 
...