Удаление определенного символа в столбце в 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)