【发布时间】: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 是不同的
【问题讨论】: