【问题标题】:read a csv file with quotation marks and regex R读取带引号和正则表达式 R 的 csv 文件
【发布时间】:2021-05-01 09:01:32
【问题描述】:
ne,class,regex,match,event,msg
BOU2-P-2,"tengigabitethernet","tengigabitethernet(?'connector'\d{1,2}\/\d{1,2})","4/2","lineproto-5-updown","%lineproto-5-updown: line protocol on interface tengigabitethernet4/2, changed state to down"

这些是前两行,第一行将用作列名,全部用逗号分隔,除第一行外,所有值都用引号引起来,我认为这会造成麻烦。

我对 columns 类和 msg 感兴趣,所以这个输出就足够了:

class              msg
tengigabitethernet %lineproto-5-updown: line protocol on interface tengigabitethernet4/2, changed state to down

但我也可以导入所有列,然后取消选择我不想要的列,不用担心。

数据来自提供给我的 .csv 文件。 如果我在 excel 中打开这个文件,这些列都是合二为一的。 我在法国工作,但我不知道文件是在哪个语言环境或编码中创建的(顺便说一句,我不是法国人,所以我不太熟悉这些)。

我试过了

df <- read.csv("file.csv", stringsAsFactors = FALSE)

数据框的列名很好地分开,但值都在第一个

然后用

    library(readr)
df <- read_delim('file.csv', 
           delim = ",", 
           quote = "",
           escape_double = FALSE, 
           escape_backslash = TRUE)

但是这样正则表达式列被分成两列,所以我完全失去了 msg 变量。

    library(data.table)
df <- fread("file.csv")

我得到 msg 变量存在但为空,因为 ne 变量包含 ne 和 class,用逗号分隔。 这是目前最好的输出,因为我可以对其进行操作以获得所需的输出。

另一种选择是使用 readLines 将文件加载为字符向量来修复它,但我不是正则表达式专家,所以我一无所知。 该文件也是 300k 行,因此很难检查它。

read.delim 和 fread 都提供警告消息,如果它们可能有用,我可以包含它们。

更新:

使用

library(data.table)
df <- fread("file.csv", quote = "")

给我一​​个更容易操作的输出,它将正则表达式和 msg 列一分为二,但 ne 和 class 是不同的

【问题讨论】:

    标签: r csv read.csv


    【解决方案1】:

    我尝试了您使用read.csv 提供的输入并且没有问题;当子集每一列是可访问的。至于您的其他选项,您的报价选项错误,它必须是"\"";双引号字符需要转义,即:df &lt;- fread("file.csv", quote = "\"")。 在您的示例中使用read.csv 时,我肯定会得到一个包含 1 行和 6 列的数据框:

    df <- read.csv("file.csv")
    nrow(df)
    # Output result for number of rows
    # > 1
    ncol(df)
    # Output result for number of columns
    # > 6
    
    tmp$ne
    # > "BOU2-P-2"
    tmp$class
    # > "tengigabitethernet"
    tmp$regex
    # > "tengigabitethernet(?'connector'\\d{1,2}\\/\\d{1,2})"
    tmp$match
    # > "4/2"
    tmp$event
    # > "lineproto-5-updown"
    tmp$msg
    # > "%lineproto-5-updown: line protocol on interface tengigabitethernet4/2, changed state to down"
    

    【讨论】:

    • 感谢您的回复,我认为这是编码和语言环境的问题,然后与 read.csv 我没有得到与您相同的输出。转义引号是 fread 中的默认选项,它提供了稍微难以操作的输出
    • 您运行的是什么操作系统? Windows 因编码问题而臭名昭著。否则文件可能不是 UTF-8;如果您知道正在使用哪种编码(不是 UTF-8 或 Latin1),您可以在 read.csv 中使用 fileEncoding 选项指定它。
    • 我在 windows 上,无论如何我在 excel 中修改了文件,现在 read.csv2 就像一个魅力,谢谢你的时间。
    猜你喜欢
    • 1970-01-01
    • 2018-04-21
    • 2015-03-24
    • 2011-03-01
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多