使用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
相关产品推荐
相关产品推荐

