Программирование на R: измените тип данных столбца с символьного (с $) на числовой

#r

#r

Вопрос:

Я очищаю фрейм данных для анализа в R. Один из столбцов содержит переменную «price», и он имеет символьный (chr) с символом $. Мне это нужно в числовом (dbl).

Ниже приведен код, который я получил. Когда я проверяю таблицу, строки заменяются на «N / A». Пожалуйста, дайте мне знать, что пошло не так, и если есть лучший код для этого. Спасибо!

 rental_df <- rental_df %>%
       mutate(location = sub(".*in ", "", location)) %>%
       price_1 = mutate_at(price, as.numeric) %>% 
       clean_names()
 

Перед очисткой

После очистки

Комментарии:

1. Я не знаю, что не так, но если вы используете mutate(price=as.numeric(price)), это должно сработать.

2. Вам нужно включить таблицу здесь

3. вы говорите, что это выглядит как «$ 19.99»? вам нужно вычесть $ перед принудительным преобразованием в числовой

4. ДА. Это выглядит как «$ 19.99». После того, как я изменяю, он показывает «N / A».

5. Как мне его заменить? Я попытался добавить => sub(«$», «», rental_df[«price»]) в мои каналы, но это не работает. Столбец цены является 9-м столбцом.

Ответ №1:

Вы можете использовать gsub для замены знака доллара.

 library(tidyverse)

set.seed(1)

rental_df <- tibble(
  location = rep(c("A", "B", "C", "D", "E"), 200),
  price = paste0("$", round(runif(1000, min = 2000, max = 4000)))
)
 
 head(rental_df, 5)
#> # A tibble: 5 x 2
#>   location price
#>   <chr>    <chr>
#> 1 A        $2531
#> 2 B        $2744
#> 3 C        $3146
#> 4 D        $3816
#> 5 E        $2403
 
 rental_df %>%
  mutate(price = as.numeric(gsub("[$]", "", price))) %>%
  head(. , 5)
#> # A tibble: 5 x 2
#>   location price
#>   <chr>    <dbl>
#> 1 A         2531
#> 2 B         2744
#> 3 C         3146
#> 4 D         3816
#> 5 E         2403
 

sub также может сработать, поскольку должен быть только один знак доллара, вероятно, вам просто не хватало квадратных скобок.

 rental_df %>%
  mutate(price = as.numeric(sub("[$]", "", price))) %>%
  head(. , 5)
#> # A tibble: 5 x 2
#>   location price
#>   <chr>    <dbl>
#> 1 A         2531
#> 2 B         2744
#> 3 C         3146
#> 4 D         3816
#> 5 E         2403
 

Я уверен, что вы проверили, но в качестве исключения убедитесь sub , что при изменении выполняется то, что вы ожидаете location . sub заменяет первый экземпляр, одновременно gsub заменяя все.

Создано 2021-12-03 пакетом reprex (v2.0.1)

Комментарии:

1. Это были квадратные скобки!!! Большое вам спасибо за то, что показали мне разные способы сделать это. Большое спасибо!!

2. @Hayley Это здорово, я рад, что это решило проблему! Не могли бы вы отметить это как ответ, чтобы все знали, что он разрешен. Я полагаю, что мы оба также получаем немного репутации.

3. @TraningPizza Понял! Еще раз спасибо за ваш подробный ответ.