удаление определенного символа в столбце в r

У меня есть таблица с именем LOAN, содержащая столбец с именем RATE, в котором наблюдения даны в процентах, например, 14,49%, как я могу отформатировать таблицу, чтобы отредактировать все значения в ставке, а% удалить из записей, чтобы я мог использовать функцию графика на нем. Я попытался использовать strsplit.

strsplit(LOAN$RATE,"%")

но получил ошибку несимвольного аргумента


person HARJOT SINGH PARMAR    schedule 05.02.2013    source источник
comment
Почти наверняка, потому что КРЕДИТНАЯ СТАВКА является фактором.   -  person mnel    schedule 06.02.2013


Ответы (3)


Элементы, которые кажутся символьными при печати, но для которых R считает иначе, обычно являются объектами факторных классов. Я также предполагаю, что вам не понравится вывод списка, который вернет strsplit. Пытаться:

gsub( "%", "", as.character(LOAN$RATE) n)

Факторы, которые кажутся числовыми, также могут быть источником путаницы:

> factor("14.9%")
[1] 14.9%
Levels: 14.9%
> as.character(factor("14.9%"))
[1] "14.9%"
> gsub("%", "", as.character(factor("14.9%")) )
[1] "14.9"

Это особенно сбивает с толку, поскольку print.data.frame удаляет кавычки:

> data.frame(z=factor("14.9%"), zz=factor(14.9))
      z   zz
1 14.9% 14.9
person IRTFM    schedule 05.02.2013
comment
Или gsub("%", "", paste(LOAN$RATE)) для нас, ленивых машинисток. Я сказал лень? Я имел в виду эффективное. - person Joshua Ulrich; 06.02.2013
comment
Я, добродетельный? Не думаю, что это то слово, которое вы хотели использовать. Если только под добродетельным вы не имели в виду ленивого и/или саркастичного. - person Joshua Ulrich; 06.02.2013
comment
Это не сработало для меня. Прежде всего, последний n в вашем кодовом блоке вызывает непредвиденную ошибку символа ... затем я попробовал предложение @JoshuaUlrich, но ничего не изменилось ... столбец, который я пытаюсь изменить, имеет тип character. Помощь? - person zsad512; 20.01.2018
comment
Я использовал data$fundraising_goal <- as.numeric(gsub("\\$", "", data$fundraising_goal)), но это выдает предупреждение: NA введены принудительно, и я не уверен, где/почему... - person zsad512; 20.01.2018
comment
Кроме того, есть ли способ применить это к нескольким столбцам одновременно? - person zsad512; 20.01.2018
comment
Без конкретного примера невозможно точно сказать, почему вы получили предупреждение. Почему бы не использовать is.na для результата, чтобы сгенерировать логический вектор, чтобы определить, какие из исходных элементов были проблемами. И использование lapply с вспомогательной функцией всегда доступно в качестве стратегии. Есть много проработанных примеров. Лучшей стратегией, чем отрицание, было бы задать вопрос. - person IRTFM; 20.01.2018

Этого можно добиться с помощью глагола mutate из пакета tidyverse. Что, на мой взгляд, более читабельно. Итак, чтобы проиллюстрировать это, я создаю набор данных под названием LOAN с акцентом на RATE, чтобы имитировать описанную выше проблему.

library(tidyverse)
LOAN <- data.frame("SN" = 1:4, "Age" = c(21,47,68,33), 
                   "Name" = c("John", "Dora", "Ali", "Marvin"),
                   "RATE" = c('16%', "24.5%", "27.81%", "22.11%"), 
                   stringsAsFactors = FALSE)
head(LOAN)
  SN Age   Name   RATE
1  1  21   John    16%
2  2  47   Dora  24.5%
3  3  68    Ali 27.81%
4  4  33 Marvin 22.11%

В дальнейшем mutate позволяет изменять содержимое столбца, gsub выполняет желаемую замену (из % на "") и преобразует столбец RATE в значение numeric, сохраняя поток очистки данных отслеживаемым.

LOAN <- LOAN %>% mutate(RATE = as.numeric(gsub("%", "", RATE)))
head(LOAN)
  SN Age   Name  RATE
1  1  21   John 16.00
2  2  47   Dora 24.50
3  3  68    Ali 27.81
4  4  33 Marvin 22.11
person odunayo12    schedule 10.07.2020
comment
Что, если вместо одного символа каждый элемент столбца RATE будет связан с разными символами? Гипотетически говоря, если RATE содержит следующие элементы 16%, 24,5?, 27,81=, 22,11: Как можно удалить разные символы, связанные с каждым элементом? - person Debjyoti; 23.10.2020
comment
@Debjyoti используйте str_replace_all("%|=|:", "", RATE) вместо gsub(), и все будет хорошо. Обратите внимание, что для продолжения добавления шаблонов все, что вам нужно сделать, это добавить | и нежелательный символ рядом с ним. Для некоторых специальных символов, таких как "*, $", вам нужно экранировать каждый, добавляя \. Например, $ станет "\$", а затем добавленный выше шаблон выглядит примерно как str_replace_all("%|=|:|\$", "", RATE). - person odunayo12; 24.10.2020

Пытаться:

LOAN$RATE <- sapply(LOAN$RATE, function(x), gsub("%", "",  x))
person Mohamed Refa't    schedule 21.06.2019
comment
Вы, вероятно, должны добавить краткое объяснение того, как работает ваш код. - person HerpDerpington; 21.06.2019
comment
Вам нужно удалить запятую после функции (x), чтобы это работало. - person Darren; 09.04.2021