如何计算 运行 均值从 "datamean" 的第 4 列开始(给定宽度=4)并且前三列为 "NA"?
How to calculate the running mean starting from the 4th column of "datamean" (given the width=4) and have first three columns as "NA"?
如何从 "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
我们可以先计算滚动平均值,然后再对datamean
列进行操作。 mutate
和 ifelse
可以检查某个行号(在本例中为最后三个)并将这些数字替换为 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
如何从 "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
我们可以先计算滚动平均值,然后再对datamean
列进行操作。 mutate
和 ifelse
可以检查某个行号(在本例中为最后三个)并将这些数字替换为 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