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

使用read_csv跳过列时如何通过缩写指定列类型

问题原因

readr的col_types参数传入的类型缩写字符串,是按照CSV文件的原始列顺序逐个匹配的,而非你通过col_select筛选后的列顺序。你示例中写的"cc"仅会将原始第1、2列(a、b)设为字符型,你筛选掉b列后,拿到的c列是原始第3列,没有匹配到你指定的类型,所以被自动猜测为双精度型。

目前readr原生不支持直接用缩写字符串匹配筛选后的列顺序,下面两种方案都可以避免你为大量跳过的列手动填写-标记:


方案1:动态生成列类型命名向量

如果要选中的列数多,不用手动逐个指定列名和类型,提前把要选的列存入向量,自动生成对应类型映射:

library(tidyverse)

# 定义需要读取的列名
sel_cols <- c("a", "c")
# 自动生成类型映射,这里统一设为字符型,可根据需求调整rep的第一个参数
col_types <- setNames(rep("c", length(sel_cols)), sel_cols)

test <- read_csv(
  "test.csv",
  col_select = all_of(sel_cols),
  col_types = col_types
)

typeof(test$c)
#> [1] "character"

方案2:使用cols_only()函数

cols_only()是readr专门为「仅读取指定列并设置类型」设计的功能,无需额外写col_select,未在cols_only中声明的列会自动跳过:

# 手动指定少量列的场景
test <- read_csv(
  "test.csv",
  col_types = cols_only(a = "c", c = "c")
)

# 大量列需要读取的场景,结合动态生成的参数调用
sel_cols <- c("a", "c")
col_spec <- do.call(cols_only, as.list(setNames(rep("c", length(sel_cols)), sel_cols)))
test <- read_csv("test.csv", col_types = col_spec)

内容的提问来源于stack exchange,提问作者nicholas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:06:00