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

使用readr导入数据并设置列类型时遇到问题

解决read.csv使用col_types参数报错的问题

错误原因

你使用的read.csv()是base R中的函数,它不支持col_types参数——这个参数是readr包(tidyverse生态的一部分)中read_csv()函数的专属参数。当你向read.csv()传递它不认识的col_types时,就会触发"unused argument"错误。

两种解决方案

方案1:改用readr包的read_csv()函数

这是最贴合你原本代码逻辑的方案,因为read_csv()原生支持col_types参数,能直接在导入时指定数据类型(包括带自定义levels的factor):

# 安装并加载readr包(首次使用需安装)
install.packages("readr")
library(readr)

ADT_v3 <- read_csv("ADT.v3.csv",
                   col_types = cols(
                     pat_enc_csn_id = col_double(),
                     pat_mrn_id = col_double(),
                     PAT_NAME = col_character(),
                     HOSP_ADMSN_TIME = col_time(format = ""),
                     HOSP_DISCH_TIME = col_time(format = ""),
                     ADT_datetime = col_time(format = ""),
                     ADT_event_name = col_factor(levels = c("Admission", "Transfer Out", "Transfer In", "Patient Update", "Census")),
                     location = col_character(),
                     ROOM_ID = col_double(),
                     level_of_care = col_factor(levels = c("NULL", "Floor", "ICU", "Floor with Tele", "Intermediate/Stepdown"))
                   ))

方案2:继续使用base R的read.csv(),改用colClasses参数

如果坚持使用base R的read.csv(),可以通过colClasses指定列的基础类型,之后再手动将目标列转换为带自定义levels的factor:

# 先导入数据,指定各列的基础类型
ADT_v3 <- read.csv("ADT.v3.csv",
                   colClasses = c(
                     "numeric",    # pat_enc_csn_id
                     "numeric",    # pat_mrn_id
                     "character",  # PAT_NAME
                     "character",  # HOSP_ADMSN_TIME
                     "character",  # HOSP_DISCH_TIME
                     "character",  # ADT_datetime
                     "character",  # ADT_event_name
                     "character",  # location
                     "numeric",    # ROOM_ID
                     "character"   # level_of_care
                   ))

# 将指定列转换为带自定义levels的factor
ADT_v3$ADT_event_name <- factor(ADT_v3$ADT_event_name,
                                levels = c("Admission", "Transfer Out", "Transfer In", "Patient Update", "Census"))
ADT_v3$level_of_care <- factor(ADT_v3$level_of_care,
                               levels = c("NULL", "Floor", "ICU", "Floor with Tele", "Intermediate/Stepdown"))

# 时间列需手动转换为时间类型(根据实际格式调整format参数)
ADT_v3$HOSP_ADMSN_TIME <- strptime(ADT_v3$HOSP_ADMSN_TIME, format = "")
ADT_v3$HOSP_DISCH_TIME <- strptime(ADT_v3$HOSP_DISCH_TIME, format = "")
ADT_v3$ADT_datetime <- strptime(ADT_v3$ADT_datetime, format = "")

补充说明

  • read_csv()在导入大型数据集时通常比read.csv()更快,且支持更灵活的类型指定,推荐用于需要精细控制数据类型的场景。
  • 如果你的时间列有特定格式,建议在col_time()中明确指定(比如format = "%Y-%m-%d %H:%M:%S"),避免自动解析出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:01:19