R 基于目标类型规范的tible柱整齐型铸造
是否有推荐的“整齐类型转换”方法,即根据目标规范将R 基于目标类型规范的tible柱整齐型铸造,r,casting,type-conversion,coercion,vctrs,R,Casting,Type Conversion,Coercion,Vctrs,是否有推荐的“整齐类型转换”方法,即根据目标规范将tible的列强制为所需的类型/类 由于似乎为向量提出了新的整洁的“螺母和粗体”,我可能更喜欢基于vctrs的解决方案。虽然我有一些有效的方法,但我想知道是否有比混合使用以下方法更好的“整洁类型铸造”(如果这是正确的概念术语): 基本R值,如factor()和numeric() vctrs::vec_cast()的方法 并通过purrr::map2_df() 这就是我目前能想到的: library(magrittr) #> Warning:
tible
的列强制为所需的类型/类
由于似乎为向量提出了新的整洁的“螺母和粗体”,我可能更喜欢基于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
库(magrittr)
#>警告:包“magrittr”是在R版本3.5.2下构建的
#资料----
df#A tible:3 x 2
#>a列b列
#>
#>1 a 1
#>2 b 2
#>3 c 3
#通过vctrs::vec_cast进近-----
col_类型%
purrr::map2_df(列类型,函数(.x,to){
vctrs::矢量转换(.x,到)
})
#>#tibble:3 x 2
#>a列b列
#>
#>1 a 1
#>2 b 2
#>3 c 3
由(v0.2.1)于2019-01-11创建
令我惊讶的是,通过readr::type_convert()
的方法似乎忽略了这样一个事实:col\u a
应该成为因子cols()
函数需要命名参数。所以
col_types <- readr::cols(
col_a = readr::col_factor(),
col_b = readr::col_double()
)
谢谢你指出这一点。虽然有点奇怪,它对double有效,但对factor无效,不是吗?如果不传递任何参数,它无论如何都会将其转换为double(请参见df%>%readr::type_convert()
),因此它基本上忽略了传入的内容。默认值是col\u guess()
,因此猜测是因为您的所有字符值都是数字,所以您需要一个数字列。
df %>%
readr::type_convert(col_types = col_types)