Есть ли рекомендуемый способ "приведение типа в порядок", то есть приведение столбцов tibble
к требуемым типам / классам на основе целевой спецификации?
Поскольку vctrs
, кажется, предлагает новые аккуратные "гайки и жирные шрифты" для векторов, я, вероятно, предпочел бы решение, основанное на vctrs
. В то время как у меня есть кое-что, что работает, мне было интересно, есть ли даже лучшие способы «приведение типа в порядок» (если это правильный концептуальный термин для этого), чем использование смеси:
- база R такие вещи, как
factor()
и numeric()
- методы
vctrs::vec_cast()
- и обработка части карты через
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
.