我的数据集来自过程控制系统,其中包含由逻辑切换功能创建的各种数字输入(记录为“报警”)。每个事件都将输入的状态从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
......等,每年产生约100万行。
我的第一个目标是计算给定时期(比如每小时或每天)的“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 {plyr}将数据集切割成时间段,然后在每个时间段内计算“Y”的实例,但这不成功。
这是我的样本.csv数据集1000行x 80列(~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
对这些事项的任何协助都表示赞赏......