使用readr包col_type()时如何选择列子集批量指定数据类型
解决read_delim批量指定连续列数据类型的方法
你之前的写法报错是因为R原生列表不支持id_1:id_5 = xxx这种批量指定键名的语法,直接在list内使用会触发语法错误,可使用以下三种方案实现需求:
方案1:使用cols()的.default参数(最适配你的场景)
如果仅第一列name为字符类型,其余所有列均为整数类型,直接用.default指定未单独声明列的统一类型即可:
library(readr) df <- read_delim( file = "data.txt", col_type = cols( name = col_character(), .default = col_integer() ), delim = " " )
方案2:使用cols()的列范围语法
如果需要指定某一段连续列的类型,而非所有未声明列,直接用起始列名:结束列名在cols()内指定即可:
library(readr) df <- read_delim( file = "data.txt", col_type = cols( name = col_character(), id_1:id_5 = col_integer() ), delim = " " )
方案3:动态构造列类型列表(适配无规律列名/按位置选择场景)
如果列名没有统一规律,或者需要按位置批量指定,可以先读取表头构造类型列表再读取全量数据:
library(readr) # 读取前0行仅获取列名,不加载数据 col_names <- names(read_delim("data.txt", n_max = 0, delim = " ")) # 构造类型列表:第1列为字符,第2到最后一列均为整数 col_types <- setNames( c(list(col_character()), rep(list(col_integer()), length(col_names)-1)), col_names ) # 读取全量数据 df <- read_delim("data.txt", col_type = col_types, delim = " ")
内容的提问来源于stack exchange,提问作者jamill0
相关产品推荐
相关产品推荐

