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

R语言批量导入CSV时如何指定变量或全部变量以字符类型读取

R语言批量导入CSV时如何指定变量或全部变量以字符类型读取

我来帮你搞定这个批量导入时的变量类型问题~你遇到的其实是read_csv2自动类型推断的“小麻烦”:它会把看起来像日期的字符串转成日期类型,把带e的字符串当成科学计数法数值处理,这就导致数据被“改了模样”。下面给你两种解决方案,按需选择:

方案一:所有变量都以字符类型导入

如果想彻底避免自动推断带来的问题,直接让所有列都读成字符类型,只需要在read_csv2里加上col_types参数,指定默认类型为字符即可:

library(fs)
library(tibble)
library(purrr)
library(readr)

fs::dir_ls(
  path = paste("C:/Users/",Sys.info()["user"],
               "/Dropbox/66_COHORTE_obe/00_RAW_DATA/1_GROUPE BARIA/SEJOURS/",
               sep = ""),
  glob="*SEJOUR*.csv",
  type="file"
) %>% {
  tibble(path=.,
         data=map(., ~read_csv2(., show_col_types=FALSE, 
                                col_types = cols(.default = col_character()))))
} -> all_files_SEJ

这样所有列都会被保留为原始字符串格式,不会被自动转换。

方案二:仅指定特定变量为字符类型

如果只是部分变量需要保持字符(比如带e的编码、ID类变量),其他变量还是想让read_csv2自动推断类型,可以用cols()函数单独指定这些列的类型:

比如假设你要把NUM_SEJOUR和CODE_PATIENT这两个变量设为字符,其他列自动判断,代码修改如下:

library(fs)
library(tibble)
library(purrr)
library(readr)

fs::dir_ls(
  path = paste("C:/Users/",Sys.info()["user"],
               "/Dropbox/66_COHORTE_obe/00_RAW_DATA/1_GROUPE BARIA/SEJOURS/",
               sep = ""),
  glob="*SEJOUR*.csv",
  type="file"
) %>% {
  tibble(path=.,
         data=map(., ~read_csv2(., show_col_types=FALSE, 
                                col_types = cols(
                                  NUM_SEJOUR = col_character(),
                                  CODE_PATIENT = col_character(),
                                  .default = col_guess()
                                ))))
} -> all_files_SEJ

这里.default = col_guess()表示除了指定的列,其他列还是用自动推断的类型,既保留了自动推断的便利,又保护了需要保持原始格式的变量。

备注:内容来源于stack exchange,提问作者Seydou GORO

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 13:24:36