【问题标题】:Set read_csv() to a fixed number of columns?将 read_csv() 设置为固定数量的列?
【发布时间】:2021-11-29 22:59:22
【问题描述】:

TLDR:如何设置 Rstudio 以将 CSV 导入为与 Microsoft Excel 完全相同的 tibble(Rstudio for mac 版本:版本 1.3.959,Excel for mac:版本 16.33,如果有帮助的话)?如果这是不可能的,或者它的行为应该已经相同,我该如何设置它以读取不超过 8 列的 CSV 文件并在行中填写空白值以便我可以整理它?

长版:

我有十几个 CSV 文件(从档案动物标签收集)很乱(宽度不一致,一个文件上有多个数据块),需要读入。出于工作流程的原因,我想获取原始数据并将其直接带入 R。文件之间的数据具有一致的结构:一个元数据块、一个 6 列宽的按天汇总,以及 2 个 2 列宽的常量日志记录块。如果您要计算每个部分中的空白单元格,它将是:

Section Width Length
Metadata 8 37
Summary Block 7 N days
Block 1 2 N*72
Block 2 2 N*72

最后三个数据块可能有数千个条目。除了单个 1x500,000+ 数据帧之外,我无法将此数据加载到 R 中。使用 tag1 = read_csv('file', skip = 37) 从我想要崩溃 R 的数据开始。它适用于 read.csv(),但这会删除我想保留的元数据块。

尝试将文件读入 Excel 会显示正确的格式(宽度、长度等),但不会加载所有数据。它切断了最后一个数据块的很大一部分。以像 read_xl() 这样的表格格式读取数据会出现同样的问题。

最终,我喜欢将数据作为包含这些不同部分的嵌套 tibble 导入,或者更好的是,自动执行此过程,以便它可以读取整个文件夹的 csv 文件,自动将它们分配给变量,然后拆分它们分成部分。但是,现在我只想将这些数据完整地转换为可行的格式,如果您能给我提供任何帮助,我将不胜感激。

【问题讨论】:

    标签: r readr


    【解决方案1】:

    获取文件中的行数n,并从中导出N。然后逐个读取块。使用相同的连接,以便每次读取都从前一次结束的位置开始。

    n <- length(count.fields("myfile", sep = ""))
    N = (n - 37) / (1 + 2 * 72)
    
    con <- file("myfile", open = "r")
    meta <- readLines(con, 37)
    summary_block <- read.csv(con, header = FALSE, nrow = N)
    block1 <- read.csv(con, header = FALSE, nrow = N * 37)
    block2 <- read.csv(con, header = FALSE, nrow = N * 37)
    close(con)
    

    【讨论】:

    • 我正在努力实现这个,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多