【问题标题】:How to Import a CSV file containing multiple sections into R?如何将包含多个部分的 CSV 文件导入 R?
【发布时间】:2011-02-07 09:24:36
【问题描述】:

我想将 csv 文件的内容导入 R,该 csv 文件包含垂直的多个数据部分,由空行和星号分隔。例如

********************************************************
* SAMPLE DATA ******************************************
********************************************************
Name, DOB, Sex
Rod, 1/1/1970, M
Jane, 5/7/1980, F
Freddy, 9.12,1965, M

*******************************************************
*  Income Data ****************************************
*******************************************************
Name, Income
Rod, 10000
Jane, 15000
Freddy, 7500

我想将它作为两个单独的数据框导入 R。目前我正在手动将 csv 文件切割成更小的文件,但我认为我可以使用 read.csv 以及 read.csv 的 skip 和 nrows 设置来做到这一点,如果我能找出分段中断的位置。

这给了我每个空行的逻辑 TRUE

ifelse(readLines("DATA.csv")=="",TRUE,FALSE)

我希望有人已经解决了这个问题。

【问题讨论】:

标签: file r csv import


【解决方案1】:

在这种情况下,我会这样做:

# Import raw data:
data_raw <- readLines("test.txt")

# find separation line:
id_sep <- which(data_raw=="")

# create ranges of both data sets:
data_1_range <- 4:(id_sep-1)
data_2_range <- (id_sep+4):length(data_raw)

# using ranges and row data import it:
data_1 <- read.csv(textConnection(data_raw[data_1_range]))
data_2 <- read.csv(textConnection(data_raw[data_2_range]))

实际上,您的第一个示例集的结构不一致,所以 data_1 看起来很奇怪。

【讨论】:

    【解决方案2】:

    也许这个未经测试的片段会有所帮助:

    reader <- file("DATA.CSV", "r")
    lines <- readLines(reader)
    writer1 <- textConnection("csv1", open = "w", local = TRUE)
    writer2 <- textConnection("csv2", open = "w", local = TRUE)
    currWriter <- writer1
    lastLine <- length(lines)
    lineNumber <- 4
    repeat {
        if (lineNumber>lastLine) break
        if (lines[lineNumber]=="********************************************************") {
            lineNumber <- lineNumber + 2 # eat two lines
            currWriter <- writer2
        } else {
            writeLines(line, currWriter)
        }
        lineNumber <- lineNumber + 1
    }
    close(reader)
    close(writer1)
    close(writer2)
    csv1Reader <- textConnection(csv1, "r")
    csv2Reader <- textConnection(csv2, "r")
    df1 <- read.csv(csv1Reader)
    df2 <- read.csv(csv2Reader)
    close(csv1Reader)
    close(csv2Reader)
    

    【讨论】:

      猜你喜欢
      • 2013-09-21
      • 2018-11-22
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      • 2011-10-24
      • 2011-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多