【问题标题】:Reading special file using read.csv使用 read.csv 读取特殊文件
【发布时间】:2021-03-17 14:15:52
【问题描述】:

我有一个文件.csv,格式如下:

"Col1, Col2, Col3, Col4"
"1, ""Hello, world!"", 7, 5"
"4, ""Name"", 4, 3"

我需要使用read.csv 读取此文件。对于sep = ",",我得到完整的NA 数据框。对于sep = "\t",我只有一列被解析为一个字符串。我尝试使用quote = ""\",但它也不起作用。
如何忽略引号并正确读取我的文件?
预期结果是:

Col1 Col2          Col3 Col4
1    Hello, world! 7    5
4    Name          4    3

【问题讨论】:

    标签: r csv read.csv


    【解决方案1】:

    可以使用readLines 读取选项,使用正则表达式进行更改以将不在两个字母之间的分隔符替换为不同的分隔符并使用read.table 读取

    df1 <- read.table(text = gsub("([a-z]),\\s*([a-z])(*SKIP)(*F)|,", ";", 
       gsub('"+', "", readLines("file1.csv")), perl = TRUE), sep=";", 
          strip.white = TRUE, header = TRUE) 
    

    -输出

    df1
    #  Col1          Col2 Col3 Col4
    #1    1 Hello, world!    7    5
    #2    4          Name    4    3
    
    
     str(df1)
    #'data.frame':  2 obs. of  4 variables:
    # $ Col1: int  1 4
    # $ Col2: chr  "Hello, world!" "Name"
    # $ Col3: int  7 4
    # $ Col4: int  5 3
    

    【讨论】:

      【解决方案2】:

      假设myfile.csv 在最后的注释中重复写入,请使用read.csv 两次。第一个read.csv 将去掉外部引号,第二个read.csv 然后读取剩下的内容。

      read.csv(text = read.csv("myfile.csv", header = FALSE)[[1]])
      

      给予:

        Col1           Col2 Col3 Col4
      1    1  Hello, world!    7    5
      2    4           Name    4    3
      

      注意

      Lines <- '"Col1, Col2, Col3, Col4"\n"1, ""Hello, world!"", 7, 5"\n"4, ""Name"", 4, 3"\n'
      cat(Lines, file = "myfile.csv")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-27
        • 2020-11-18
        相关资源
        最近更新 更多