1

我有一个日志文件,其中有 15 列以空格分隔,但日志文件中的最后一列是电子邮件主题行并包含空格。我不确定如何将这样的文件读入 R。最后一列如下所示:SUBJ:X XXX XXX XXX XXX XXX 我知道如何使用 read.table 读取以空格分隔的文件,但我不确定给定最后一列,该怎么办。

4

2 回答 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 回答