Apache read.table并将函数应用于列

Apache read.table并将函数应用于列,apache,class,r,Apache,Class,R,我正在使用read.table读取apache日志文件,我想知道是否有可能在导入数据时应用函数(即strtime),而不是对其进行后处理 请提供更多详细信息: 包含日期的列的格式为: [10/Nov/2011:06:25:14 我可以使用以下方法成功解析它: strptime(red[1,4],format="[%d/%b/%Y:%H:%M:%S") 或 但是 失败了。因此,我无法在colClasses AFAIK中使用POSIXct。或许可以为日志定义所需的格式。因此,如果数据格式良好,则

我正在使用read.table读取apache日志文件,我想知道是否有可能在导入数据时应用函数(即strtime),而不是对其进行后处理

请提供更多详细信息: 包含日期的列的格式为:

[10/Nov/2011:06:25:14
我可以使用以下方法成功解析它:

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

但是


失败了。因此,我无法在colClasses AFAIK中使用POSIXct。

或许可以为日志定义所需的格式。因此,如果数据格式良好,则无需对其进行后处理

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

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

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

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

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

如果存在
as.
方法,则可以将colClasses与该类一起使用。由于Date是一个类,默认格式为YYYY-MM-DD,因此如果您的日期是该格式,则可以在
colClasses
向量中包含日期。还可以将新的
定义为.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"
库(方法)
setClass(“日志日期”)
#[1] “日志日期”
setAs(“字符”、“日志日期”、函数(从)
as.POSIXct(from,format=“[%d/%b/%Y:%H:%M:%S”))

DF如果有
as.
方法,您可以将colClasses与该类一起使用。由于Date是一个类,默认格式为YYYY-MM-DD,如果您的日期是该格式,您可以只在
colClasses
向量中包含日期。还可以将新的
as.函数定义为
。一如既往,您提供的日期越详细关于这个问题,答案越好

 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"
库(方法)
setClass(“日志日期”)
#[1] “日志日期”
setAs(“字符”、“日志日期”、函数(从)
as.POSIXct(from,format=“[%d/%b/%Y:%H:%M:%S”))


DF我正计划这样做,但我有很多遗留数据需要管理。可能现有日志上的一些sed/awk对您的情况会有所帮助。我正计划这样做,但我有很多遗留数据需要管理。可能现有日志上的一些sed/awk对您的情况会有所帮助。编写一个简单地同时完成这两个任务的函数(先读取文件,然后处理列)在功能上是等效的。由于要处理的数据很多,我正在尽可能提高效率。为什么您认为调用read.table,然后手动执行日期强制的函数效率会很低?如果您采取了这一路线,您现在可能已经完成了。;)我强烈建议将
读取
清除
操作分开。如果您返回并意识到存在错误,篡改
原始
数据可能会给您带来很大的痛苦。不确定其他用户是怎么想的,但我认为一个好的工作流程会将两者分开。以及@joran表示,我不认为这会降低效率。编写一个同时执行这两项任务的函数(读取文件,然后处理列)在功能上是等效的。由于要处理的数据很多,我正在尽可能地提高效率。为什么您认为调用read.table然后手动执行日期强制的函数效率会很低?如果您采用了这种方法,您现在可能已经完成了。;)我强烈建议保留
read
clean
操作是分开的。如果你回去发现有一个bug,在没有保存的情况下篡改
原始数据会给你带来很大的痛苦。不确定,其他用户怎么想,但我认为一个好的工作流程会将两者分开。正如@joran所指出的,我不认为这会降低效率。我“我编辑了问题以添加更多详细信息,谢谢你的输入。谢谢。我会轻松解决问题。从R 2.14开始,你可以使用
text
参数,使
textConnection
read.table
过时。FWIW.:)我编辑了问题以添加更多详细信息,谢谢你的输入。谢谢。我会轻松解决问题。”x、 从R2.14开始,您可以使用
text
参数,使
textConnection
read.table
结合使用,从而使.FWIW.)