我有一个日志文件,其中有 15 列以空格分隔,但日志文件中的最后一列是电子邮件主题行并包含空格。我不确定如何将这样的文件读入 R。最后一列如下所示:SUBJ:X XXX XXX XXX XXX XXX 我知道如何使用 read.table 读取以空格分隔的文件,但我不确定给定最后一列,该怎么办。
问问题
112 次
2 回答
1
如果最后一列总是以“SUBJ”开头,你也许可以使用这样的东西。
对于此示例,我们将创建一个名为“myFile”的示例文件:
cat("aaaa bbb ccccc SUBJ:X Y ZZZ\naaaaaa bbbbbbb ccccccc SUBJ:X XXX\naaa b ccccc\n", file = "myFile.txt")
用于readLines
读入myFile.txt
(或您的实际日志文件)。请注意,第三行没有主题。
myFile <- readLines("myFile.txt")
myFile
# [1] "aaaa bbb ccccc SUBJ:X Y ZZZ"
# [2] "aaaaaa bbbbbbb ccccccc SUBJ:X XXX"
# [3] "aaa b ccccc"
使用一些正则表达式来匹配最后一个“列”:
myMatches <- gregexpr("SUBJ:.*$", myFile)
使用该信息阅读您的data.frame
:
cbind(read.table(text = unlist(regmatches(myFile, myMatches, invert=TRUE))),
subj = sapply(regmatches(myFile, myMatches),
function(x) ifelse(length(x) > 0, x, NA)))
# V1 V2 V3 subj
# 1 aaaa bbb ccccc SUBJ:X Y ZZZ
# 2 aaaaaa bbbbbbb ccccccc SUBJ:X XXX
# 3 aaa b ccccc <NA>
于 2013-04-29T16:47:56.570 回答
0
使用 readLines 将其读入,然后使用 gsub 将前 14 个空格替换为逗号。
这显示了如何通过一个简单的示例来做到这一点:
gsub("^(\\w\\s)(\\w\\s)(\\w\\s)(\\w\\s)", "\\1,\\2,\\3,\\4," ,
paste(letters[1:8], collapse=" ") )
[1] "a ,b ,c ,d ,e f g h"
于 2013-04-29T16:46:11.017 回答