我有一个日志文件,其中15列用空格分隔,但日志文件中的最后一列是电子邮件主题行并包含空格。我不知道如何将这样的文件读入R. 最后一列看起来像:SUBJ:X XXX XXX XXX XXX XXX 我知道如何使用read.table读取空格分隔文件,但我不知道该怎么做,给出最后一列。
答案 0 :(得分: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>
答案 1 :(得分: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"