r - 忽略导入中存在解析错误的文件 (read_csv)
问题描述
我有一个 .zip 格式的原始数据,里面有一个 .txt 文件。在大多数情况下,它使用 read_csv 干净地读入,但有些行的数据正在记录其他内容,并且完全扭曲了列结构。这些数据不可能被修复。
使用时read_csv
,它显示为解析问题。我想设置我的代码,如果数据中出现此问题,则忽略整个文件。如果有日志记录哪些文件被忽略/丢弃,那就太好了。我查看了possibly()
,但由于它不是文件的完整错误,只有行,它不会跳过文件。
这是我目前的代码。
library(dplyr)
library(readr)
library(purrr)
read_log <- function(path) {
read_csv(path, col_types = cols(.default = col_character())) %>%
mutate(filename = basename(path))
}
test_files <- file.path("example.txt") #would normally be list.files, simplified for this reprex
raw_data <- map_dfr(test_files, read_log)
#> Warning: 6 parsing failures.
#> row col expected actual file
#> 3 -- 17 columns 4 columns 'example.txt'
#> 4 -- 17 columns 23 columns 'example.txt'
#> 5 -- 17 columns 23 columns 'example.txt'
#> 6 -- 17 columns 23 columns 'example.txt'
#> 7 -- 17 columns 23 columns 'example.txt'
#> ... ... .......... .......... .............
#> See problems(...) for more details.
解决方案
NULL
如果返回警告,您可以返回。尝试使用此功能。
library(reader)
library(purrr)
library(dplyr)
read_log <- function(path) {
data <- tryCatch(read_csv(path,col_types = cols(.default = col_character())),
warning = function(e) return(NULL))
if(!is.null(data))
data <- data %>% mutate(filename = basename(path))
return(data)
}
map
使用而不是读取数据map_dfr
:
all_data <- map(test_files, read_log)
未读取的文件
not_read_files <- test_files[sapply(all_data, is.null)]
合并数据
total_data <- bind_rows(all_data)
推荐阅读
- jsf - jsf静态列表不会出现在数据表中
- spring-integration - 如何使用自定义错误通道和 WebFlux.inboundGateway 回复错误响应?
- javascript - 将对象键作为参数传递给函数
- node.js - 在本地机器上的 VSCode 中使用 NodeJS 运行带有层的 AWS Lambda
- vb.net - 替换或删除字符串中的字符
- node.js - 构建全栈应用程序目录的合适方法是什么?
- javascript - 无法绑定到“ngModel”,因为它不是 ng-bootstrap 模态中“输入”的已知属性
- git - GIT如何从fork创建的PR中获取分支名称
- asp.net-mvc - Fluent NHibernate 映射不适用于某些表
- mysql - SQL - 如何为每个用户检索 5 个最近的评论