如何将readr的col_spec应用到现有data.frame/tibble而无需从文件读入
解决方案
使用readr包内置的type_convert()函数即可实现需求,该函数原生支持将已定义的col_spec对象直接应用到现有数据框,且默认保留未在col_spec中声明列的原始数据类型,无需临时文件中转。
代码示例
library(tidyverse) # 示例输入数据 sw <- starwars %>% select(name, height, ends_with("_color")) %>% slice(c(1,4,5,19)) # 已定义的列类型规则 cspec <- cols( hair_color = col_factor(c("brown", "blond", "white", "none")), skin_color = col_factor(c( "green", "light", "fair", "white")), eye_color = col_factor(c("blue", "brown", "yellow")) ) # 直接应用col_spec到现有数据框 sw_fct <- type_convert(sw, col_types = cspec) # 查看结果,height列仍保留原始integer类型,不会丢失类型信息 sw_fct #> # A tibble: 4 × 5 #> name height hair_color skin_color eye_color #> <chr> <int> <fct> <fct> <fct> #> 1 Luke Skywalker 172 blond fair blue #> 2 Darth Vader 202 none white yellow #> 3 Leia Organa 150 brown light brown #> 4 Yoda 66 white green brown
如果需要对未在cspec中指定的列统一设置默认转换规则,可以在cols()中补充.default参数定义即可。
内容的提问来源于stack exchange,提问作者Magnus
相关产品推荐
相关产品推荐

