按日和月R的频率

时间:2014-07-18 16:55:32

标签: r date aggregate frequency cumsum

我有一个大型数据集......包含63年数据的60k记录。

我需要在63年的时间段内生成每天平均事件数量的图表,从而生成如下数据框:

Date Frequency
DDMM    5.2

第一个问题 - 如何将日期DD / MM / YYYY转换为DD / MM以允许分组

第二:在数据集的时间跨度内,最好在当天产生平均值的函数。

我看过聚合和积累,但由于我无法通过DDMM和平均值进行分组而失败了。

更新

 esums <- with(TorData,
          tapply(Count, 
                 format( as.Date(Date, "%d/%m/%Y"), "%d/%m"), 
                 sum, na.rm=TRUE) )

Data<-esums/63

结果如下:

    01/01     01/02     01/03     01/04     01/05     01/06     01/07     01/08 
    0.4444444 0.6190476 2.1428571 1.8095238 4.9365079 5.4920635 4.0000000 1.7301587 
    01/09     01/10     01/11     01/12     02/01     02/02     02/03     02/04 
    1.4444444 1.1904762 0.9206349 0.4126984 0.8412698 0.7936508 2.3015873 4.9206349 
    02/05     02/06     02/07     02/08     02/09     02/10     02/11     02/12 
    4.7936508 6.4920635 3.8888889 2.0317460 1.5714286 0.7936508 0.4603175 1.0634921 

转换为Dataframe

    Data<-as.data.frame(Data)

数据现在在一个数组上,需要转换为数据框吗?

       Data
 01/01 0.4444444
 01/02 0.6190476
 01/03 2.1428571
 01/04 1.8095238
 01/05 4.9365079
 01/06 5.4920635
 01/07 4.0000000
 01/08 1.7301587
 01/09 1.4444444
 01/10 1.1904762
 01/11 0.9206349
 01/12 0.4126984

我对线图的要求是2列,一列是Date,另一列是Mean,Date似乎丢失了数据类型?

1 个答案:

答案 0 :(得分:1)

尝试这样的事情(在没有可重现的例子的情况下未经测试):

 esums <- with(my_dataframe,
            tapply(event_count, 
                   format( as.Date(my_dates, "%d/%m/%Y"), "%d/%m"), 
                   sum, na.rm=TRUE) )
 enums <-  with(my_dataframe,
            tapply(event_count[!is.na(event_count)], 
                   format( as.Date(my_dates, "%d/%m/%Y"), "%d/%m"), 
                   sum, na.rm=TRUE) )
 mean_by_day_of_year <- esums/enums

您创建的数据框具有因子值(因为没有年份,它们不是真正的日期,并且没有日期数据类型,as.data.frame将d / m转换为rownames。)您可以使用序列索引作为x值绘制线图,设置xaxt =&#34; n&#34;,然后使用axis(1, ...)绘制信息标签。

   dat <- read.table(text=    "Data
 01/01 0.4444444
  01/02 0.6190476
  01/03 2.1428571
  01/04 1.8095238
  01/05 4.9365079
  01/06 5.4920635
  01/07 4.0000000
  01/08 1.7301587
  01/09 1.4444444
  01/10 1.1904762
  01/11 0.9206349
  01/12 0.4126984", header=TRUE)
 plot(dat$Data, xaxt="n")
 axis(1, at=1:nrow(dat), labels=rownames(dat), las=2)
 png(); plot(dat$Data, xaxt="n")
        axis(1, at=1:nrow(dat), labels=rownames(dat), las=2)
 dev.off()

>