【问题标题】:Read files that are pipe AND comma delimited: |column1|,|column2|读取管道和逗号分隔的文件:|column1|,|column2|
【发布时间】:2019-07-01 12:37:07
【问题描述】:

我的文件如下所示:

|2000|,|23456745|,|23567897tyhgy6|,|SHARP, RODNEY H III|
|2000|,|12345678|,|34567tgh788877|,|WOOLARD, EDGAR S JR|

基本上,列用逗号分隔并用管道包裹。

如何使用 R 阅读这样的内容?

我试过了

read.table("file.txt", sep="|")

但这并不好用,因为其他每一列都只包含一个逗号。我试过使用“|,|”作为分隔符,但显然这是不允许的。使用“,”根本不起作用,因为名称会被拆分。

有什么简单的方法吗?

【问题讨论】:

  • 试试read.table("./temp.csv", sep=",", quote = "|")
  • 我不认为这是建议主题的重复。这个问题与多个分隔符无关。
  • @Wimpel 你的想法效果很好,速度也很快!如果您将其发布为答案,我会接受

标签: r csv dataframe


【解决方案1】:

read.table("./temp.csv", sep=",", quote = "|") 可以解决问题...

【讨论】:

    【解决方案2】:

    您可以尝试将其替换为其他分隔符:

    plouf <-   readChar("file.txt", file.info("file.txt")$size)
    plouf <- gsub("\\|,\\|",";",plouf) # replace the separator
    plouf <- gsub("\\|","",plouf) # remove the end pipes
    read.table(plouf,sep=";") # read with the semi colon sep
    

    测试:

    plouf <- "|2000|,|23456745|,|23567897tyhgy6|,|SHARP, RODNEY H III|
              |2000|,|12345678|,|34567tgh788877|,|WOOLARD, EDGAR S JR|"
    
    plouf <- gsub("\\|,\\|",";",plouf)
    plouf <- gsub("\\|","",plouf)
    read.table(text = plouf,sep=";")
    
        V1       V2             V3                  V4
    1 2000 23456745 23567897tyhgy6 SHARP, RODNEY H III
    2 2000 12345678 34567tgh788877 WOOLARD, EDGAR S JR
    

    【讨论】:

    • 这里的问题是“|Smith, John|”将被读取为两列...
    • @jackson5 我提出了另一个解决方案
    • 谢谢,这也可以。然而,在大型数据集上它非常慢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多