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

如何让readr读取含可变列数CSV文件的全部列?

解决readr读取不同列数CSV的问题

你的推测完全正确:readr的read_csv会默认根据文件前若干行(默认1000行)推断列数,而你的A类型记录(仅7列,无后续分隔符)排在前面,导致它误判文件只有7列,把B、C类型的后续字段都合并到第7列里。

解决方法是强制指定文件的列数与类型,用read_delim替代read_csv(两者逻辑类似,但read_delim更适合这种需要精确控制的场景):

方法1:统一按字符型读取所有30列

这种方式最稳妥,后续可根据实际需求转换列类型:

names <- paste0("col", 1:30)
df <- read_delim(
  file = "myfile",
  delim = ",",
  col_names = names,
  col_types = cols(.default = col_character()),
  trim_ws = TRUE # 可选,自动去除字段两端空格
)

方法2:精确指定每列的类型

如果你清楚各列的数据类型,可以更精准地定义列规范,避免后续转换:

names <- paste0("col", 1:30)
# 自定义列类型,示例中col1设为整数,col2设为字符,其余设为数值
col_spec <- cols(
  col1 = col_integer(),
  col2 = col_character(),
  .default = col_double()
)
df <- read_delim(
  file = "myfile",
  delim = ",",
  col_names = names,
  col_types = col_spec
)

这样处理后,A类型记录的第8到30列会自动填充NA,B类型的第21到30列也会填充NA,所有字段都会被正确拆分到对应的列中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:21:32