微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在数据框的R中应用10年平均过滤器?

如何解决如何在数据框的R中应用10年平均过滤器?

如何在此数据帧的NBP上运行10年平均过滤器?

这是数据帧的头

> head(df3)
  Year         NBP
1 1850  35.454343
2 1851  4.5634543
3 1852  112.389182
4 1853  151.169251
5 1854  73.123145
6 1855  -72.309647

实际上,我有1850年到2100年的岁月,如何在该数据帧的NBP上对变量NBP应用10年平均滤波器并按时间绘制它?

解决方法

一个选择是使用slider包函数slide_dbl(),该函数允许您创建滚动变量。这里的代码:

library(slider)
library(dplyr)
set.seed(123)
#Data
df <- data.frame(Year=1990:2020,NBP=rnorm(31,2,0.5))
# Rolling by group
df %>% 
  mutate(rollingNBP = slide_dbl(NBP,mean,.before = 9,.complete = T))

输出:

   Year       NBP rollingNBP
1  1990 1.8399718         NA
2  1991 1.3442388         NA
3  1992 1.7001958         NA
4  1993 1.9352947         NA
5  1994 2.4433681         NA
6  1995 1.9243020         NA
7  1996 2.1648956         NA
8  1997 0.3863386         NA
9  1998 1.6141041         NA
10 1999 2.1432743   1.749598
11 2000 1.3897440   1.704576
12 2001 2.2172752   1.791879
13 2002 2.4000884   1.861868
14 2003 1.9180345   1.860142
15 2004 2.6214594   1.877952
16 2005 1.5328075   1.838802
17 2006 2.1968543   1.841998
18 2007 2.2018157   2.023546
19 2008 1.5567816   2.017813
20 2009 1.3405312   1.937539
21 2010 2.0144220   2.000007
22 2011 1.7839351   1.956673
23 2012 2.8449363   2.001158
24 2013 2.6141964   2.070774
25 2014 2.1380117   2.022429
26 2015 1.4755122   2.016700
27 2016 1.7395653   1.970971
28 2017 2.8116013   2.031949
29 2018 1.4649659   2.022768
30 2019 2.8429436   2.173009
31 2020 1.8791551   2.159482

如果要包含图解,则可以使用ggplot2

library(ggplot2)
#Code2
df %>% 
  mutate(rollingNBP = slide_dbl(NBP,.complete = T)) %>%
  ggplot(aes(x=Year,y=rollingNBP))+
  geom_line()

输出:

enter image description here

如果您想同时看两个系列,请尝试以下操作:

library(tidyr)
#Code 3
df %>% 
  mutate(rollingNBP = slide_dbl(NBP,.complete = F)) %>%
  pivot_longer(-Year) %>%
  ggplot(aes(x=Year,y=value,group=name,color=name))+
  geom_line()

输出:

enter image description here

,

来自rollmean的{​​{1}}的选项

zoo

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。