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

R-如何计算n个先前值的平均值/平均值,但不包括当前观察值滚动平均值 数据

如何解决R-如何计算n个先前值的平均值/平均值,但不包括当前观察值滚动平均值 数据

有人可以建议如何最好地在数据框中创建一个新列,其中每个观察值是前12个观察值(不包括当前观察值)的平均值/均值。到目前为止,我未能在此处找到类似的答案,因此将不胜感激!

我的数据框:

LateCounts <- 

    Date    Count
1   Jan-19  7
2   Feb-19  4
3   Mar-19  9
4   Apr-19  8
5   May-19  7
6   Jun-19  4
7   Jul-19  4
8   Aug-19  5
9   Sep-19  2
10  Oct-19  5
11  Nov-19  7
12  Dec-19  4
13  Jan-20  3
14  Feb-20  4
15  Mar-20  5
16  Apr-20  2
17  May-20  3
18  Jun-20  2
19  Jul-20  3
20  Aug-20  4
21  Sep-20  3
22  Oct-20  2

我当前正在使用以下代码

LateCounts <- LateCounts %>% mutate(RollAvge=rollapplyr(Count,12,mean,partial = TRUE))

这将得出以下但12个月的滚动平均值:

    Date    Count   RollAvge
1   Jan-19   7      7
2   Feb-19   4      5.5
3   Mar-19   9      6.666667
4   Apr-19   8      7
5   May-19   7      7
6   Jun-19   4      6.5
7   Jul-19   4      6.142857
8   Aug-19   5      6
9   Sep-19   2      5.555556
10  Oct-19   5      5.5
11  Nov-19   7      5.636364
12  Dec-19   4      5.5
13  Jan-20   3      5.166667
14  Feb-20   4      5.166667
15  Mar-20   5      4.833333
16  Apr-20   2      4.333333
17  May-20   3      4
18  Jun-20   2      3.833333
19  Jul-20   3      3.75
20  Aug-20   4      3.666667
21  Sep-20   3      3.75
22  Oct-20   2      3.5

我实际需要实现的是以下内容。这是12个月的追踪或滚动平均值(其中“ RollAvge”列中的值是“计数”列中先前值的平均值/均值-不包括当前月份。

    Date    Count   RollAvge
1   Jan-19  7   
2   Feb-19  4       7
3   Mar-19  9       5.5
4   Apr-19  8       6.666667
5   May-19  7       7
6   Jun-19  4       7
7   Jul-19  4       6.5
8   Aug-19  5       6.142857
9   Sep-19  2       6
10  Oct-19  5       5.555556
11  Nov-19  7       5.5
12  Dec-19  4       5.636364
13  Jan-20  3       5.5
14  Feb-20  4       5.166667
15  Mar-20  5       5.166667
16  Apr-20  2       4.833333
17  May-20  3       4.333333
18  Jun-20  2       4
19  Jul-20  3       3.833333
20  Aug-20  4       3.75
21  Sep-20  3       3.666667
22  Oct-20  2       3.755556

谢谢

解决方法

我们需要提取lag的输出中的rollapply

library(dplyr)
library(zoo)
LateCounts %>%
      mutate(RollAvge= lag(rollapplyr(Count,12,mean,partial = TRUE)))

-输出

#      Date Count RollAvge
#1  Jan-19     7       NA
#2  Feb-19     4 7.000000
#3  Mar-19     9 5.500000
#4  Apr-19     8 6.666667
#5  May-19     7 7.000000
#6  Jun-19     4 7.000000
#7  Jul-19     4 6.500000
#8  Aug-19     5 6.142857
#9  Sep-19     2 6.000000
#10 Oct-19     5 5.555556
#11 Nov-19     7 5.500000
#12 Dec-19     4 5.636364
#13 Jan-20     3 5.500000
#14 Feb-20     4 5.166667
#15 Mar-20     5 5.166667
#16 Apr-20     2 4.833333
#17 May-20     3 4.333333
#18 Jun-20     2 4.000000
#19 Jul-20     3 3.833333
#20 Aug-20     4 3.750000
#21 Sep-20     3 3.666667
#22 Oct-20     2 3.750000

数据

LateCounts <- structure(list(Date = c("Jan-19","Feb-19","Mar-19","Apr-19","May-19","Jun-19","Jul-19","Aug-19","Sep-19","Oct-19","Nov-19","Dec-19","Jan-20","Feb-20","Mar-20","Apr-20","May-20","Jun-20","Jul-20","Aug-20","Sep-20","Oct-20"),Count = c(7L,4L,9L,8L,7L,5L,2L,3L,2L)),class = "data.frame",row.names = c("1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22"))
,

使用 dplyr zoo ,有一种方法可以使用 data.frame 函数@ NW320d使用相同的滚动平均值函数,但不使用变异和管道

库(dplyr)

图书馆(动物园)

使用@akrun的LateCounts代码(感谢您提供该代码段!)

> LateCounts <- structure(list(Date = c("Jan-19",+ "May-19",+ "Dec-19",+ "Jul-20",+ 8L,+ 4L,+ "4",+ "16","22"))

> data.frame(LateCounts$Count,rollavg=dplyr::lag(rollapplyr(LateCounts$Count,partial = TRUE)))

Output:
   LateCounts.Count  rollavg
1                 7       NA
2                 4 7.000000
3                 9 5.500000
4                 8 6.666667
5                 7 7.000000
6                 4 7.000000
7                 4 6.500000
8                 5 6.142857
9                 2 6.000000
10                5 5.555556
11                7 5.500000
12                4 5.636364
13                3 5.500000
14                4 5.166667
15                5 5.166667
16                2 4.833333
17                3 4.333333
18                2 4.000000
19                3 3.833333
20                4 3.750000
21                3 3.666667
22                2 3.750000

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

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?