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

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

strsplit(LOAN$RATE,"%")

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

4 ответа

Элементы, которые кажутся символами при печати, но для которых 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

Этого можно добиться с помощью 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

СТАВКА ДОЛЛАРОВ ССУДЫ <- sapply(СТАВКА ССУДЫ, функция (x), gsub("%", "", x))

Вот еще один способ сделать это, используя tidyverse readr::parse_number. У меня недостаточно репутации, чтобы комментировать пост odunayo12, поэтому я добавлю его как новый с его примером :)

      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)

LOAN <- LOAN %>% 
  mutate(RATE =  parse_number(RATE))

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

Создано 2021-08-28 пакетом REPEX (v2.0.0)

Другие вопросы по тегам