过去5天平均

时间:2015-01-27 06:22:49

标签: r

所以我的数据看起来像这样:

DATE        Value
    1/2/2004    68
    1/5/2004    92
    1/6/2004    100
    1/7/2004    73
    1/8/2004    71
    1/9/2004    75
    1/12/2004   100
    1/13/2004   59
    1/14/2004   71
    1/15/2004   74
    1/16/2004   54
    1/19/2004   68
    1/20/2004   64
    1/21/2004   53
    1/26/2004   67
    1/27/2004   53
    1/28/2004   58
    1/29/2004   56
    1/30/2004   86
    2/3/2004    79
    2/4/2004    82
    2/5/2004    51
    2/6/2004    61
    2/9/2004    99
    2/10/2004   51
    2/11/2004   61
    2/12/2004   88
    2/13/2004   64
    2/16/2004   99
    2/17/2004   90
    2/18/2004   97
    2/19/2004   61
    2/20/2004   59
    2/23/2004   63
    2/24/2004   64
    2/25/2004   74
    2/26/2004   88
    2/27/2004   93

这种情况持续了5年。

我想找到R中每个月最后5天的平均“价值”,这可能吗?

我希望这很清楚。

谢谢。

2 个答案:

答案 0 :(得分:5)

如果dfdata.frame

library(data.table)

df$DATE = as.Date(df$DATE, format="%m/%d/%Y")

setDT(df)[order(DATE), mean(tail(Value,5)), by=list(year(DATE), month(DATE))]
#   month year   V1
#1:     1 2004 64.0
#2:     2 2004 76.4

答案 1 :(得分:4)

使用dplyr/tidyr

的选项
library(dplyr)
library(tidyr)
gby <-  extract(df, DATE, c('month', 'year'), '(.*)/.*/(.*)') %>%
                                             group_by(month, year) 

gby %>%
      slice((n()-4):n()) %>% 
      summarise(Value=mean(Value))
 #   month year Value
 #1     1 2004  64.0
 #2     2 2004  76.4

或者

gby %>%
     summarise(Value=mean(tail(Value,5)))

base R选项

  MONTH <- sub('/.*', '', df$DATE)
  YEAR <-  sub('.*/', '', df$DATE)
  aggregate(Value~MONTH+YEAR, df, FUN=function(x) mean(tail(x,5)))
  #  MONTH YEAR Value
  #1     1 2004  64.0
  #2     2 2004  76.4