我的数据集来自过程控制系统,其中包含由逻辑交换功能创建的各种数字输入(记录为“报警”) . 每个事件将输入的状态从0更改为1,在数据集中记录为“N”或“Y”字符,因此:

tstamp             alarm0   alarm1  alarm2  alarm3  alarm4...alarm204
2015-10-01 16:23:06 N       N       N       N       N
2015-10-01 16:23:36 N       N       N       N       N
2015-10-01 16:24:06 Y       Y       N       Y       N
2015-10-01 16:24:36 Y       N       N       Y       N
2015-10-01 16:25:06 N       Y       N       Y       N
2015-10-01 16:25:36 N       N       N       N       N

等等,每年产生~1m行 .

我的第一个目标是计算给定时期内的“Y”数(比如每小时或每天),并使用热图或类似信息将其与其他类似时期的事件频率进行比较 . 我的第二个目标是确定警报从0切换到1的次数,即确定事件是否不经常发生并持续很长一段时间,或者是否经常在短时间内发生 .

我使用...将数据集切割成合适的时间段

cut(Mydf$tstamp,breaks="hour")

我可以使用...计算整个数据集中的“Y”

apply(X=Mydf,2,FUN = function(x) length(which(x=="Y")))

当按tstamp分组时,我无法剪切和计算数据集,其中break ='hour'或'week'或'month' .

我一直在尝试使用ddply 将数据集切割成时间段,然后在每个时间段内计算“Y”的实例,但这是不成功的 .

这是我的样本.csv数据集1000行x 80 cols(~175kb)... http://1drv.ms/1HsdY75

library(plyr)

# Read in the data files...
Mydf <- read.csv("C:/.../Mydf_small.csv")

# convert tstamp from "factor" class to "POSIXct" class (requires plyr      package)
Mydf$tstamp <- as.POSIXct(Mydf$tstamp) # turn tstamp into a time format that can be evaluated
Mydf$timebrk <- cut(Mydf$tstamp,breaks="hour") # set the time interval to  count the number of active alarms in
mylevels <- unique(Mydf$timebrk) 

# example... this counts all instances of "Y" regaldless of mylevel...
MyCount <- apply(X=Mydf,2,FUN = function(x) length(which(x=="Y")))
MyCount

# want to count instances of "Y" within mylevel (...but this doesn't work)
ddcount <- ddply(.data=Mydf,.variables=mylevels,.fun = function(x) length(which(x=="Y")))
ddcount

对这些事项的任何帮助表示赞赏