Удаление скобок и знака доллара с помощью gsub() в R?
Я импортировал CSV-файл в г. Немногие из моих столбцов содержат данные о валютах (например, начинаются с '$'). Чтобы удалить '$' и преобразовать его в числовой тип, я использовал функцию gsub(), и она отлично работает. Пример кода:
strip_dollars = function(x) { as.numeric(gsub("[\\$, ]", "", x)) }
lapply(data[ , c("x4", "x5", "x7", "x8")] , strip_dollars)
Но в одном конкретном столбце валюты у меня есть несколько записей с круглыми скобками, такими как (2345 долл. США), 3 500 долл. США, 5 600 долл. США (3 234 долл. США)... Следовательно, для этого столбца приведенный выше код не работает. Пожалуйста, помогите мне удалить скобки и знак доллара из этих записей.
Кроме того, чтобы идентифицировать столбцы, содержащие данные о валюте, я много пробовал, включая решения, приведенные в R - определить, какие столбцы содержат данные о валюте $, но это не работает. Пожалуйста, предложите оптимальный способ сделать это.
1 ответ
Я думаю, что самый простой способ состоит в том, чтобы пройти через то, что заменено. Я делаю вывод, что вы не хотите терять негативность, предложенную паранами, поэтому мы сделаем два шага:
s <- c("($2,345)", "$3,500", "$5,600", "($3,234)")
gsub("[$),]", "", s)
# [1] "(2345" "3500" "5600" "(3234"
Это удаляет большую часть мусора (который мы не хотели / не должны оставлять), теперь давайте разберемся с ведущим левым паренем:
gsub("^\\s*[(]", "-", gsub("[$),]", "", s))
# [1] "-2345" "3500" "5600" "-3234"
Отсюда, если необходимо, вы можете преобразовать в numeric
:
as.numeric(gsub("^\\s*[(]", "-", gsub("[$),]", "", s)))
# [1] -2345 3500 5600 -3234
Это не очень устойчиво к неправильно сформированным струнам. Например, хотя я ищу (и удаляю) начальное место для левой части, все остальное будет проблемой.