R语言批量读取多个CSV文件时如何指定列类型
R批量读取CSV时指定列类型的实现方法
首先注意你现有代码的一个兼容问题:read.delim默认以制表符\t作为字段分隔符,直接读取逗号分隔的.csv文件会出现列解析错位,建议替换为专门读CSV的read.csv函数,或者给read.delim传入sep=","参数适配CSV格式。
根据你所有待读文件的结构一致性,分两种方案实现列类型指定:
所有CSV列顺序、列结构完全统一:直接用基础读取函数的
colClasses参数即可
该参数接受向量输入,既可以按列的排列顺序逐列指定类型,也可以通过列名定向给部分列指定类型,剩余列交给R自动推断。支持传入的常用类型值包括:"character":字符型"numeric"/"integer":数值型/整数型"Date":日期型"factor":因子型"NULL":跳过对应列不读取
示例代码(按顺序指定全列类型):
temp = list.files(pattern="*.csv") # 假设所有CSV共3列,依次为字符型ID、数值型统计值、日期型记录时间 myfiles = lapply(temp, read.csv, colClasses = c("character", "numeric", "Date"))如果只需要指定个别列的类型(比如把ID列强制存为字符型,避免长数字ID被转成科学计数法),可以传命名向量,不需要写全所有列:
myfiles = lapply(temp, read.csv, colClasses = c(user_id = "character", phone = "character"))待读CSV列顺序不固定、存在列数差异:推荐用readr包的
read_csv函数
基础包的colClasses靠顺序匹配列的容错性差,read_csv的col_types参数支持按列名精准匹配指定类型,不受列排列顺序影响,还支持灵活跳过不需要的列。
示例代码:library(readr) temp = list.files(pattern="*.csv") myfiles = lapply(temp, read_csv, col_types = cols( user_id = col_character(), pay_amount = col_double(), create_time = col_date(format = "%Y-%m-%d"), redundant_col = col_skip() # 跳过不需要的冗余列 ))
内容的提问来源于stack exchange,提问作者rish
相关产品推荐
相关产品推荐

