将所有数据保存在“周围”;rollmean";输出
我最近发现将所有数据保存在“周围”;rollmean";输出,r,zoo,moving-average,R,Zoo,Moving Average,我最近发现rollmean将为我提供矩阵中某个数字的移动平均值。我遇到的问题是,我的矩阵缩小了,而且在执行函数时,我也丢失了行名称。例如,矩阵MA.test本身就是行中每天的数量(A=Mon,B=Tues等): 当我应用平均覆盖每侧3天的函数时(这将使用7,包括这一天),我将使用rollmean(MA.Test,7)并标记此MA.Test.1,得到以下结果: > MA.Test.1 = rollmean(MA.Test,7) > MA.Test.1 a b c d
rollmean
将为我提供矩阵中某个数字的移动平均值。我遇到的问题是,我的矩阵缩小了,而且在执行函数时,我也丢失了行名称。例如,矩阵MA.test
本身就是行中每天的数量(A=Mon,B=Tues等):
当我应用平均覆盖每侧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
我的问题有两个:
> 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
。然后您可以将结果的行名设置为输入的行名
MA.Test.1 <- rollmean(MA.Test,7,fill=NA)
rownames(MA.Test.1) <- rownames(MA.Test)
MA.Test.1使用fill=NA
填充NA
。然后可以将结果的行名设置为输入的行名
MA.Test.1 <- rollmean(MA.Test,7,fill=NA)
rownames(MA.Test.1) <- rownames(MA.Test)
MA.Test.1注意这是有效的:library(zoo);as.data.frame(rollmean(zoo(MA.Test,rownames(MA.Test)),7))
不带fill=NA
。它假设行名是升序的。嗨,Joshua,我把日期作为行名,但是我在数据处理过程的前面使用了Lubridate-str()将它们表示为POSIXct。这会影响您概述的方法吗?Thanks@Qaribbean:行名不能是POSIXct
,它们始终是字符。如果行名有日期和时间,那么在我的回答中使用as.POSIXct
而不是as.Date
。Joshua,这很有效!我的道歉,应该解释什么d是日期(POSIXct格式)最初是第一列,然后我使用它们作为行名,然后删除了列(因为当日期值存在时,rollmean函数不会在整个数据帧中工作。@G.Grothendieck此方法也很有用,谢谢!注意此方法有效:library(zoo);as.data.frame(rollmean(zoo(MA.Test,rownames(MA.Test)),7))
不带fill=NA
。它假设行名按升序排列。嗨,Joshua,我将日期作为行名,但是我在数据处理过程中使用了Lubridate-str()将它们表示为POSIXct。这会影响您概述的方法吗?Thanks@Qaribbean:行名不能是POSIXct
,它们始终是字符。如果行名有日期和时间,那么在我的回答中使用as.POSIXct
而不是as.Date
。Joshua,这很有效!我的道歉,应该解释什么d是日期(POSIXct格式)最初是第一列,然后我使用它们作为行名,然后删除了列(因为当日期值存在时,rollmean函数在数据框中不起作用。@G.Grothendieck此方法也很有用,谢谢!
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)