You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 04:39:03