Приведение в порядок столбцов Tibble на основе спецификации целевого типа - PullRequest
0 голосов
/ 11 января 2019

Есть ли рекомендуемый способ "приведение типа в порядок", то есть приведение столбцов tibble к требуемым типам / классам на основе целевой спецификации?

Поскольку vctrs, кажется, предлагает новые аккуратные "гайки и жирные шрифты" для векторов, я, вероятно, предпочел бы решение, основанное на vctrs. В то время как у меня есть кое-что, что работает, мне было интересно, есть ли даже лучшие способы «приведение типа в порядок» (если это правильный концептуальный термин для этого), чем использование смеси:

  1. база R такие вещи, как factor() и numeric()
  2. методы vctrs::vec_cast()
  3. и обработка части карты через purrr::map2_df()

Вот что я мог придумать:

library(magrittr)
#> Warning: package 'magrittr' was built under R version 3.5.2

# Data ----
df <- tibble::tribble(
  ~col_a, ~col_b,
  "a",   "1",
  "b",   "2",
  "c",   "3"
)

# Approach via readr::cols and readr::type_convert -----
col_types <- readr::cols(
  readr::col_factor(),
  readr::col_double()
)

df %>% 
  readr::type_convert(col_types = col_types)
#> # A tibble: 3 x 2
#>   col_a col_b
#>   <chr> <dbl>
#> 1 a         1
#> 2 b         2
#> 3 c         3

# Approach via vctrs::vec_cast -----
col_types <- list(
  factor(),
  numeric()
)

df %>%
  purrr::map2_df(col_types, function(.x, to) {
    vctrs::vec_cast(.x, to)
  }) 
#> # A tibble: 3 x 2
#>   col_a col_b
#>   <fct> <dbl>
#> 1 a         1
#> 2 b         2
#> 3 c         3

Создано в 2019-01-11 пакетом Представ (v0.2.1)

Что меня удивило, так это то, что подход через readr::type_convert(), похоже, игнорирует тот факт, что col_a должен стать factor.

1 Ответ

0 голосов
/ 11 января 2019

Функция cols() ожидает именованные параметры. Итак

col_types <- readr::cols(
  col_a = readr::col_factor(),
  col_b = readr::col_double()
)

будет работать с

df %>% 
  readr::type_convert(col_types = col_types)
...