是否有建议的“整型类型转换”方法,即根据目标规范将tibble
的列强制为所需的类型/类?
由于vctrs
似乎为向量提出了新的整洁的“螺母和粗体”,所以我可能更喜欢基于vctrs
的解决方案。虽然我有一些可行的方法,但我想知道是否有比“混合类型转换”更好的方法(如果这是正确的概念术语),而不是混合使用以下方法:
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
由reprex package(v0.2.1)于2019-01-11创建
让我惊讶的是,通过readr::type_convert()
进行的处理似乎忽略了col_a
应该成为factor
的事实。
答案 0 :(得分:1)
cols()
函数需要命名参数。所以
col_types <- readr::cols(
col_a = readr::col_factor(),
col_b = readr::col_double()
)
将与
一起使用df %>%
readr::type_convert(col_types = col_types)