Я пытаюсь получить скользящее среднее для многих столбцов одновременно, но я сталкиваюсь с трудностями, потому что мои группирующие переменные не являются числовыми c.
Если бы я делал скользящее среднее для одного столбца время от времени мой код должен выглядеть примерно так:
NHLReg2<-arrange(NHLReg2,season,team,gameId) %>% group_by(season,team)%>% mutate(xGF= rollapply(xGoalsFor, list( seq(21)), sum, partial = TRUE, fill = NA))
Я пытался использовать dplyr для одновременного создания множества столбцов:
NHLPP3<-arrange(NHLPP2,season,team,gameId) %>%
group_by(season,team)%>%
select(c(1,2,11:112)) %>%
lapply(function(x){ if(class(x) == "numeric"){
rollapply(x, width=list(-seq(21)), FUN=function(x){sum(x,
na.rm=T)},partial = T, fill = NA)
}else{
return(x)
}
})%>% as.data.frame()
Это решает проблему проблема игнорирования символьных / групповых переменных для rollapply, но это приводит к тому, что оператор groupby не имеет никакого эффекта. Я оставил некоторые примеры данных ниже, представьте, что v1 и v2 - это переменные группировки, а v3 и v4 - интересующие столбцы для расчета скользящего среднего.
v1<-c('a','a','a','a','a','a','a','a','b','b','b','b','b','b','b')
v2<-c('2010','2010','2010','2010','2010','2010','2010','2010','2020','2020','2020','2020','2020','2020','2020')
v3<-c(1,2,3,4,1,4,5,6,13,5,6,13,4,65,8)
v4<-c(6,13,5,6,13,4,65,8,1,2,3,4,1,4,5)
Data<-as.data.frame(t(rbind(v1,v2,v3,v4)))
Спасибо.