【问题标题】:Split rows when importing csv to R将csv导入R时拆分行
【发布时间】:2018-10-25 01:28:45
【问题描述】:

我有一个大的 csv 文件,其中随机行以以下字符串结尾:/\r/。此后的下一行应该是上一行的延续,但它被视为新行。应该应用什么功能来解决这个问题?到目前为止,我已经设法通过将 csv 作为字符串向量导入 R 来定位损坏的行,即我使用了文件中没有出现的分隔符,因此 R 将整行读取为一列。现在我想把以上述字符串结尾的行和后面的行粘贴在一起。

此处示例:

"CLSL;2017-01-09;PA930082402;23;10986450"
"CLNA;2016-09-05 /\r/"
";650963783;1;60010670"

我希望它看起来像这样:

"CLSL;2017-01-09;PA930082402;23;10986450"
"CLNA;2016-09-05;650963783;1;60010670"

【问题讨论】:

  • \r 是文字文本,还是您已经格式化的回车标记?
  • 我没有格式化任何东西。我在使用 fread 导入时遇到了 EOF 错误,所以我导入了文件,就像我在上面写的那样,作为一列中的一整行。该文件太大而无法手动修复这些错误,例如在记事本中

标签: r csv import


【解决方案1】:

这里的正确解决方案可能是为您的 csv 来源的任何数据库中的值添加引号,但除此之外,这是将您拥有的字符向量组合到 data.frame 中的一种方法。

tt <- c("CLSL;2017-01-09;PA930082402;23;10986450", 
        "CLNA;2016-09-05 /\r/", ";650963783;1;60010670",
        "CLSL;2017-01-09;PA930082402;23;10986450", 
        "CLNA;2016-09-05 /\r/", ";650963783;1;60010670")

tt <- sub(" /\r/\n", "", paste0(tt, "\n"))
tt <- paste(tt, collapse="")
read.csv2(text=tt, header=FALSE)

#     V1         V2          V3 V4       V5
# 1 CLSL 2017-01-09 PA930082402 23 10986450
# 2 CLNA 2016-09-05   650963783  1 60010670
# 3 CLSL 2017-01-09 PA930082402 23 10986450
# 4 CLNA 2016-09-05   650963783  1 60010670

【讨论】:

    【解决方案2】:
    #read file
    txt <- readLines("test.csv")
    
    #find row index of junk value
    idx <- which(grepl(" /\\\\r/", txt))
    #append next immediate row with the row having junk value
    txt[idx] <- paste0(txt[idx], txt[idx+1])
    txt <- txt[-(idx+1)]
    
    #remove junk value
    txt <- gsub(" /\\\\r/", "", txt)
    

    输出为:

    > txt
    [1] "CLSL;2017-01-09;PA930082402;23;10986450" "CLNA;2016-09-05;650963783;1;60010670"  
    

    样本数据: test.csv 包含

    CLSL;2017-01-09;PA930082402;23;10986450
    CLNA;2016-09-05 /\r/
    ;650963783;1;60010670
    

    【讨论】:

      猜你喜欢
      • 2013-01-29
      • 1970-01-01
      • 2021-08-02
      • 2018-01-13
      • 2017-06-26
      • 2017-01-20
      • 2018-11-21
      • 1970-01-01
      相关资源
      最近更新 更多