微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

读取带有引号和正则表达式 R

如何解决读取带有引号和正则表达式 R

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"

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

>

我对列类和 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文件作为字符向量加载以修复它,但我不是正则表达式的专家,所以我会一无所知。 该文件也是 30 万行,因此很难检查。

read.delim 和 fread 都会给出警告信息,如果它们可能有用,我可以包含它们。

更新:

使用

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

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

解决方法

我尝试使用您通过 read.csv 提供的输入并且没有问题;当子集每一列都可以访问时。至于您的其他选项,您将引用选项弄错了,它必须是 "\"";双引号字符需要转义,即:df <- 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"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。