将所有数据保存在“周围”;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
我的问题有两个:

  • 我知道输出从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
    。然后您可以将结果的
    行名设置为输入的行名

    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)