数据如下:
a <- rep('A',6)
b <- rep('B',6)
c <- c('2020-10-01','2020-09-01','2020-01-01','2020-03-10','2020-11-01','2020-08-01')
d <- c(1,2,3,4,5,6)
df <- data.frame(a,b,c,d)
df1 <- df %>%
group_by(a,b) %>%
summarise(d=mean(d)) ###### Summarise 'd' of only the latest 3 months
“ a”和“ b”列应分组在一起,并且“ d”列应根据最近3个月的“日期”列进行汇总。
每个小组应持续最近的3个月。无法筛选出过去3个月的全部数据。每个小组应有最近三个月的时间
“最近3个月。因此应选择'2020-11-01','2020-10-01'和'2020-09-01'。因为它们是DF中的最近3个月”
使用基数R。我们将数据除以a
和b
因子,然后选择最近三个月(对于每个a / b分组),然后基于最近三个月对每个a / b分组进行平均,然后rbind
一起返回:
df$c <- as.Date(df$c) # convert to date
do.call("rbind",
lapply(split(df, list(df$a, df$b)),
FUN = function(dat) aggregate(d ~ a + b,
data = tail(dat[order(dat$c),], 3),
FUN = mean)))
使用类似的想法(分组,排序,然后拖尾) data.table
library(data.table)
setDT(df)[order(c), tail(.SD, 3), .(a, b)][,.(mean_d = mean(d)), .(a, b)]
a b mean_d
1: A B 2.666667
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句