1
我最近发现rollmean
将为我提供矩阵中某个数字的移动平均值。我遇到的问题是我的矩阵缩小了,而且在执行函数时我也失去了行名。例如作为这类基质MA.test
是每天量的行(A =星期一,B =星期二等):保留“rollmean”输出的所有数据
> MA.Test
a b c d e f g h i j k l m n o p q r s t
A 49 21 6 27 34 49 21 6 27 34 49 21 6 27 34 49 21 6 27 34
B 35 23 37 47 45 35 23 37 47 45 35 23 37 47 45 35 23 37 47 45
C 40 0 20 10 19 40 0 20 10 19 40 0 20 10 19 40 0 20 10 19
D 8 46 22 3 28 8 46 22 3 28 8 46 22 3 28 8 46 22 3 28
E 30 7 1 42 39 30 7 1 42 39 30 7 1 42 39 30 7 1 42 39
F 9 16 32 14 33 9 16 32 14 33 9 16 32 14 33 9 16 32 14 33
G 48 5 13 15 11 48 5 13 15 11 48 5 13 15 11 48 5 13 15 11
H 12 38 36 18 24 12 38 36 18 24 12 38 36 18 24 12 38 36 18 24
I 43 26 17 44 25 43 26 17 44 25 43 26 17 44 25 43 26 17 44 25
J 41 2 29 31 4 41 2 29 31 4 41 2 29 31 4 41 2 29 31 4
当我应用函数的平均覆盖3天每一侧(这将是使用7,纳入当天,我会用rollmean(MA.Test,7)
并标注此MA.Test.1
,并得到如下:
> MA.Test.1 = rollmean(MA.Test,7)
> MA.Test.1
a b c d e f g h i j k l m n o p q r s t
[1,] 31 17 19 23 30 31 17 19 23 30 31 17 19 23 30 31 17 19 23 30
[2,] 26 19 23 21 28 26 19 23 21 28 26 19 23 21 28 26 19 23 21 28
[3,] 27 20 20 21 26 27 20 20 21 26 27 20 20 21 26 27 20 20 21 26
[4,] 27 20 21 24 23 27 20 21 24 23 27 20 21 24 23 27 20 21 24 23
我的查询有两个方面:
我知道输出始于行D附近的MA,并在行G结束,因为我没有行A/B/C或H/I/J的值,因为它们的周围数据不足;我将如何仍将这些行保留在输出中,只需一个“NA”?
我失去了行名 - 对于这个小例子来说足够简单,但我的真实数据集包含+100行,这些行名称是日期;我如何将原始列名保留在输出中?
我期望的最终输出看上去就像这样:
> MA.Test.1 = rollmean(MA.Test,7)
> MA.Test.1
a b c d e f g h i j k l m n o p q r s t
A NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
B NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
C NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
D 31 17 19 23 30 31 17 19 23 30 31 17 19 23 30 31 17 19 23 30
E 26 19 23 21 28 26 19 23 21 28 26 19 23 21 28 26 19 23 21 28
F 27 20 20 21 26 27 20 20 21 26 27 20 20 21 26 27 20 20 21 26
G 27 20 21 24 23 27 20 21 24 23 27 20 21 24 23 27 20 21 24 23
H NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
I NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
J NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
衷心感谢你对所提供的任何解决方案!
请注意,这工作:'图书馆(动物园); as.data.frame(rollmean(zoo(MA.Test,rownames(MA.Test)),7))''fill'= NA'。它假定rownames是按升序排列的。 –
嗨约书亚,我有日期作为行名,但是我在数据操作过程中使用了Lubridate - str()表示它们为POSIXct。这会影响你列出的方法吗?谢谢 – Qaribbean
@Qaribbean:行名不能是'POSIXct',它们总是字符。如果行名具有日期和时间,那么只需在我的答案中使用'as.POSIXct'而不是'as.Date'。 –