首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >读取列不一致的文件时的r data.table问题

读取列不一致的文件时的r data.table问题
EN

Stack Overflow用户
提问于 2020-11-15 01:45:46
回答 2查看 935关注 0票数 2

当我使用R data.table(fread)读取dat文件(3GB)时,会出现以下问题:

在3169933线的早些时候停了下来。预计有136个字段,但发现138个。比如fill=TRUE和comment.char=。第一次丢弃的非空行:

我的代码:

代码语言:javascript
运行
复制
library(data.table)
file_path = 'data.dat' # 3GB
fread(file_path,fill=TRUE)

问题是我的文件有大约500万行。详细情况:

  • 从第1行到第3169933行有136个列
  • 从第3169933行到第5000000行有138个列

由于此错误,fread()只将我的文件读取到第3169933行。在这种情况下,fill = TRUE没有提供帮助。有人能帮我吗?

R版本: 3.6.3 data.table版本: 1.13.2

请注意本例中的fill=TRUE:

案例1- -如果我的文件第1部分(50%的行)有138个列,第2部分有136个列,那么fill=TRUE将有所帮助(它将用NA填充第2部分的两列)。

案例2- -如果我的文件第1部分(50%行)有136列,第2部分有138列,那么fill =TRUE在这种情况下不会有帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-15 06:04:32

不知道为什么你仍然有问题,即使与fill=T.但是,如果没有任何帮助,你可以试着玩这样的东西:

代码语言:javascript
运行
复制
tryCatch(
  expr    = {dt1 <<- fread(file_path)},
  warning = function(w){
    cat('Warning: ', w$message, '\n\n');
    n_line <- as.numeric(gsub('Stopped early on line (\\d+)\\..*','\\1',w$message))
    if (!is.na(n_line)) {
      cat('Found ', n_line,'\n')
      dt1_part1 <- fread(file_path, nrows=n_line)
      dt1_part2 <- fread(file_path, skip=n_line)
      dt1 <<- rbind(dt1_part1, dt1_part2, fill=T)
    }
  },
  finally = cat("\nFinished. \n")
);

tryCatch()构造捕获警告消息,因此您可以提取行号并相应地处理它。

票数 2
EN

Stack Overflow用户

发布于 2020-11-15 04:15:06

尝试分别阅读它们,在为第一部分创建两个额外的列之后,将它们组合起来。

代码语言:javascript
运行
复制
first_part = fread('data.dat', nrows = 3169933) %>%
  mutate(extra_1 = NA, extra_2 = NA)

second_part = fread('data.dat', skip = 3169933)
df = bind_rows(first_part, second_part)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64840482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档