如何从" datamean"的第4列开始计算运行平均值。 (给定宽度= 4)并且前三列为" NA"?

时间:2017-08-21 14:28:06

标签: r ggplot2 rstudio rollapply

如何从" datamean"的第4列开始计算运行平均值。 (因为宽度= 4)并且第一列和最后三列为" NA"还是空的?

 require(zoo)    
 data <- zoo(seq(1:10))
 datamean <- rollapply(data, width=4, by=1, FUN=mean, align="left")
 cbind(data, datamean)

目前的输出是:

    data datamean
1     1      2.5
2     2      3.5
3     3      4.5
4     4      5.5
5     5      6.5
6     6      7.5
7     7      8.5
8     8       NA
9     9       NA
10   10       NA

但是我想:

    data datamean
1     1      NA
2     2      NA
3     3      NA
4     4      2.5
5     5      3.5
6     6      4.5
7     7      5.5
8     8      NA
9     9      NA
10   10      NA

1 个答案:

答案 0 :(得分:1)

我们可以先计算滚动平均值,然后再操纵datamean列。 mutateifelse可以检查某个行号(在本例中为最后三个)并将这些数字替换为NA。 dt2是最终输出。

library(dplyr)
require(zoo)

dt <- data_frame(data = zoo(seq(1:10)))

dt2 <- dt %>%
  mutate(datamean = rollmean(data, k = 4, fill = NA, align = "right")) %>%
  mutate(datamean = ifelse(row_number() %in% n():(n() - 2), NA, datamean))

dt2
# A tibble: 10 x 2
        data datamean
   <S3: zoo>    <dbl>
 1         1       NA
 2         2       NA
 3         3       NA
 4         4      2.5
 5         5      3.5
 6         6      4.5
 7         7      5.5
 8         8       NA
 9         9       NA
10        10       NA