R数据帧变量之间的移动平均值
我正试图找到解决办法,但还没有。 我的数据框架结构如下:R数据帧变量之间的移动平均值,r,variables,moving-average,R,Variables,Moving Average,我正试图找到解决办法,但还没有。 我的数据框架结构如下: country City 2014 2015 2016 2017 2018 2019 France Paris 23 34 54 12 23 21 US NYC 1 2 2 12 95 54 我想找出每3年(即2014-16年、2015-17年等)的移动平均值,并将其放在特别列中 country City 2014 2015 2016 2017 2018 2019 201
country City 2014 2015 2016 2017 2018 2019
France Paris 23 34 54 12 23 21
US NYC 1 2 2 12 95 54
我想找出每3年(即2014-16年、2015-17年等)的移动平均值,并将其放在特别列中
country City 2014 2015 2016 2017 2018 2019 2014-2016 2015-2017 2016-2018 2017-2019
France Paris 23 34 54 12 23 21 37 33.3 29.7 18.7
US NYC 1 2 2 12 95 54 etc etc etc etc
有什么提示吗?1使用末尾注释中重复显示的数据,我们将rollmean应用于数据转置中的每一列,然后再转置回去。我们应用适当的粘贴命令来创建名称
library(zoo)
DF2 <- DF[-(1:2)]
cbind(DF, setNames(as.data.frame(t(rollmean(t(DF2), 3))),
rollapply(names(DF2), 3, function(x) paste(range(x), collapse = "-"))))
2这也可以用dplyr/tidyr/zoo表示,如下所示:
library(dplyr)
library(tidyr)
library(zoo)
DF %>%
pivot_longer(-c(country, City)) %>%
group_by(country, City) %>%
mutate(value = rollmean(value, 3, fill = NA),
name = rollapply(name, 3, function(x) paste(range(x), collapse="-"), fill=NA)) %>%
ungroup %>%
drop_na %>%
pivot_wider %>%
left_join(DF, ., by = c("country", "City"))
笔记
1使用末尾注释中重复显示的数据,我们将rollmean应用于数据转置中的每一列,然后再转置回。我们应用适当的粘贴命令来创建名称
library(zoo)
DF2 <- DF[-(1:2)]
cbind(DF, setNames(as.data.frame(t(rollmean(t(DF2), 3))),
rollapply(names(DF2), 3, function(x) paste(range(x), collapse = "-"))))
2这也可以用dplyr/tidyr/zoo表示,如下所示:
library(dplyr)
library(tidyr)
library(zoo)
DF %>%
pivot_longer(-c(country, City)) %>%
group_by(country, City) %>%
mutate(value = rollmean(value, 3, fill = NA),
name = rollapply(name, 3, function(x) paste(range(x), collapse="-"), fill=NA)) %>%
ungroup %>%
drop_na %>%
pivot_wider %>%
left_join(DF, ., by = c("country", "City"))
笔记
非常感谢你的帮助。你能解释一下这是怎么回事吗?我以后会避免用愚蠢的问题来打扰社区…非常感谢你的解释。另一个问题:第一个解决方案只考虑那些3年来都有数据的国家。有没有可能把只有一两个数字的年份也包括在内,平均数是1年或2年呢?@G.格罗森迪克:你是说这样的吗cbindext\u pov,setNamesas.data.frametrollapplytext\u pov\u 4,3,FUN=mean,partial=TRUE,rollapplynamesext\u pov\u 4,3,FUN=mean,partial=TRUE,functionx pasterangex,collapse=-`@G.Grothendieck:理论上你是对的,不过我甚至试图标记1个数据,在为每个国家考虑的三年期方案中包括2个或3个,但这是另一个问题。无论如何,脚本仍然没有考虑包括1个或更多NAs的三年期。非常感谢您的帮助。你能解释一下这是怎么回事吗?我以后会避免用愚蠢的问题来打扰社区…非常感谢你的解释。另一个问题:第一个解决方案只考虑那些3年来都有数据的国家。有没有可能把只有一两个数字的年份也包括在内,平均数是1年或2年呢?@G.格罗森迪克:你是说这样的吗cbindext\u pov,setNamesas.data.frametrollapplytext\u pov\u 4,3,FUN=mean,partial=TRUE,rollapplynamesext\u pov\u 4,3,FUN=mean,partial=TRUE,functionx pasterangex,collapse=-`@G.Grothendieck:理论上你是对的,不过我甚至试图标记1个数据,在为每个国家考虑的三年期方案中包括2个或3个,但这是另一个问题。无论如何,脚本仍然没有考虑三年期,包括1个或更多NAs。