所以我的数据看起来像这样:
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天的平均“价值”,这可能吗?
我希望这很清楚。
谢谢。
答案 0 :(得分:5)
如果df
是data.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