我正在使用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。
答案 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