read.table并将函数应用于列

时间:2011-11-10 14:56:29

标签: apache class r

我正在使用read.table读取apache日志文件,并且想知道在导入数据时是否可能以某种方式应用函数(即strptime),而不是对其进行后处理。

按要求提供更多详情: 包含日期的列的格式为:

[10/Nov/2011:06:25:14

我可以使用以下方法成功解析它:

strptime(red[1,4],format="[%d/%b/%Y:%H:%M:%S")

as.POSIXct(strptime(red[1,4],format="[%d/%b/%Y:%H:%M:%S"))

as.POSIXct(red[1,4],format="[%d/%b/%Y:%H:%M:%S")

失败。因此我不能在colClasses AFAIK中使用POSIXct。

2 个答案:

答案 0 :(得分:4)

如果有as.方法,则可以对该类使用colClasses。由于Date是一个类,并且默认格式为YYYY-MM-DD,如果您的日期采用该格式,则可以在colClasses向量中包含Date。也可以定义新的as.function。与往常一样,您提供的有关问题的详细信息越多,答案就越好。

 library(methods)
 setClass("logDate")
#[1] "logDate"
 setAs("character", "logDate", function(from) 
                              as.POSIXct(from, format="[%d/%b/%Y:%H:%M:%S"))
 DF <- read.table(text="[10/Nov/2011:06:25:14", header = FALSE,
                            colClasses = c("logDate"))
 str(DF)
#'data.frame':  1 obs. of  1 variable:
# $ V1: POSIXct, format: "2011-11-10 06:25:14"

可能应该给Gabor Grothendieck一些功劳,因为他是5年前告诉我如何做到这一点的人: https://www.stat.math.ethz.ch/pipermail/r-help/2007-April/130912.html

答案 1 :(得分:0)

可能您可以为日志定义所需的格式,而不是这样。因此,如果数据格式良好,则不需要对数据进行后处理。

LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common

http://httpd.apache.org/docs/2.0/logs.html#accesslog http://httpd.apache.org/docs/2.0/mod/mod_log_config.html