r - fread 在 check.names 之后应用 select 和 colClasses?
问题描述
我正在尝试读取大量数据(最多 100 个文件,每个文件大小不超过 1.5GB),它们的格式有点烦人,而且每个文件都略有不同。出于速度原因,我想使用data.table::fread
但我有很多问题:
- 输入数据(我无法控制格式)有许多列名称相同
- ID 列(可能还有其他列)显示为一个数字,但实际上是一个字符或因子列 - 我需要保留前导 0,所以我不能在导入后直接隐藏
- 我只想要一些列,并且有这么多数据不希望导入然后关闭
- 每个文件的编号和名称列略有不同。我想要的列很容易用正则表达式找到,而且我总是会得到相同的数量。
我的攻击计划是导入所有列并使用正则表达式找到合适select
的列,然后在fread
. 但是现在我坚持分配colClasses
,因为这些是在选择列之前以及在检查名称之前分配的,所以即使使用命名列表也不起作用。有没有办法在/colClasses
之后应用而不丢失我的前导零?select
check.names
我尝试了在 fread 中使用 colClasses的命名列技术,还回顾了Using colClasses and select arguments of fread 同时但两者都不能处理我的文件中的差异
可重现的例子:
dt <- data.frame(ID = c("01","02","03"), HH = 1:3, MM = rep(0,3), HH = 2:4, MM = rep(0,3),Precipx = rnorm(3),
other1 = rep(0,3), other2 = rep(1,3),check.names = F)
write.csv(dt, "test.csv", row.names = F, quote = F)
Colnames <- names(fread("test.csv",nrows = 0 ,check.names = T))
ColNos <- grp(c("ID|HH.1|MM.1|$Precip"),Colnames)
#This import works, but I lose leading 0s
dat <- fread("test.csv", check.names = T, select = ColNos)
#This tells me I have the wrong number of `colClasses`, but I cannot set for all columns as varies file to file
dat <- fread("test.csv", check.names = T, select = ColNos, colClasses = c("character","charcter","character","numeric"))
#This doesn't recognise that I want the second HH column. Using just `"HH"` also has this problem
# and "Precipx" will sometimes be "Precipy", "Precipz"... in the file
dat<- fread("test.csv", check.names = T, select = ColNos,
colClasses = c("ID" = "character","HH.1" = "charcter","MM.1" = "character","Precipx" = "numeric"))
解决方案
推荐阅读
- php - 警告:mysqli_real_connect(): (HY000/2002): 第 1626 行 /var/www/html/wp-includes/wp-db.php 中没有这样的文件或目录
- javascript - 如果其他控件没有值,如何使复选框保持禁用状态,如果控件在 angular8 中有值则启用
- servicestack - 拦截 Fluent 验证
- image-processing - Pytorch - 推理时损失 0.000 和 keyerror
- json - Docker -- 带有 json 的格式。多个占位符的特定占位符语法
- edaplayground - EDA 操场 $dumpfile?
- regex - 如何获取正则表达式前面的字符
- protoc - 使用 protoc-gen-grpc-web 生成原型定义时出现 TypeScript 定义文件的问题
- javascript - 检测“在线”和“离线”角度8
- node.js - 如何返回所有 URL 的苗条应用程序?