将所有数据保持在 "rollmean" 输出附近
Keeping all data around "rollmean" output
我最近发现 rollmean
会为我提供围绕矩阵中某个数字的移动平均线。我遇到的问题是我的矩阵缩小了,并且在执行函数时我也丢失了行名。例如,矩阵 MA.test
是行中每天的数量(A = 周一,B = 周二,等等):
> 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
感谢您提供的任何解决方案!
用fill=NA
填充NA
。然后你可以将结果的 rownames
设置为输入的
MA.Test.1 <- rollmean(MA.Test,7,fill=NA)
rownames(MA.Test.1) <- rownames(MA.Test)
但是如果您的实际数据以日期作为行名,那么您可以只使用 zoo(或 xts)。
library(xts)
ma <- MA.Test
rownames(ma) <- Sys.Date()-9:0
# zoo
z <- zoo(ma, as.Date(rownames(ma)))
z1 <- rollmean(z, 7, fill=NA)
# xts
x <- as.xts(ma)
x1 <- rollmean(x, 7, fill=NA)
我最近发现 rollmean
会为我提供围绕矩阵中某个数字的移动平均线。我遇到的问题是我的矩阵缩小了,并且在执行函数时我也丢失了行名。例如,矩阵 MA.test
是行中每天的数量(A = 周一,B = 周二,等等):
> 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
感谢您提供的任何解决方案!
用fill=NA
填充NA
。然后你可以将结果的 rownames
设置为输入的
MA.Test.1 <- rollmean(MA.Test,7,fill=NA)
rownames(MA.Test.1) <- rownames(MA.Test)
但是如果您的实际数据以日期作为行名,那么您可以只使用 zoo(或 xts)。
library(xts)
ma <- MA.Test
rownames(ma) <- Sys.Date()-9:0
# zoo
z <- zoo(ma, as.Date(rownames(ma)))
z1 <- rollmean(z, 7, fill=NA)
# xts
x <- as.xts(ma)
x1 <- rollmean(x, 7, fill=NA)