【发布时间】:2018-09-28 15:34:34
【问题描述】:
我想使用 dplyr 和 tbrf 计算每组“类型”的 90 天滚动几何平均值和第 90 个百分位数。下面的代码为每个日期生成百分位数,而不是每 90 天。它也错误地生成了重复的行。
旁注:我首先尝试使用 %within% 并在 lubridate 包中创建一个间隔。但是,dplyr 目前不支持来自 lubridate 的类 Interval,因此想尝试 tbrf。我也试过 tibbletime、RcppRoll 和 zoo 的 Rollapply
##sample data###
Value=c(50,900,25,25,125,50,25,25,2000,25,25,
25,25,25,25,25,25,325,25,300,475,25)
Dates = as.Date(c("2015-02-23","2015-04-20","2015-06-17",
"2015-08-20","2015-10-05","2015-12-22",
"2016-01-19","2016-03-29","2016-05-03",
"2016-07-21","2016-09-08","2016-11-07",
"2017-02-27","2017-04-19","2017-06-29",
"2017-08-24","2017-10-23","2017-12-28",
"2018-01-16","2018-03-14","2018-05-29",
"2018-07-24"))
Type = c(rep("A", 11), rep("B", 11))
df=data.frame(Value,Dates,Type)
######failed attempt 1####
df2=df %>% group_by(Type) %>%
tbr_gmean(Value, Dates, "days", 90) %>%
tbr_misc(Value, Dates,"days", 90, quantile, .(0.9))
## failed attempt #2##
start.date = min(df$Dates)
breaks = seq(start.date - 30*3600*24, start.date + 30*3600*24, "90 days")
df$group = cut(df$Dates, breaks=breaks)
DF= df %>% group_by(Type,group) %>%
mutate(Count=n(),gm=geoMean(Value),
percentile_90=quantile(Value,0.90))
【问题讨论】:
-
你查过代码
as.Date(c(5:20)) -
是的。它生成 16 个连续日期
-
对我来说,它给出了错误
as.Date(c(5:20))# Error in as.Date.numeric(c(5:20)) : 'origin' must be supplied -
你不是说
Dates1 <- as.Date(Sys.Date() + 5:20)吗? -
很奇怪。我给你改一下