在R条件下运行平均值?

在R条件下运行平均值?,r,R,使用“caTools”计算运行平均值很容易,但我只希望窗口中至少有3个值,否则返回NA library("caTools") x=c(56,NA,4,6,2,1,NA,NA,NA,5,2,5,6,4,7,5,2,NA) runmean(x,5) 像这样的东西 > library(zoo) > rollapply(x, 3, mean) [1] NA NA 4.000000 3.000000 NA NA

使用“caTools”计算运行平均值很容易,但我只希望窗口中至少有3个值,否则返回NA

    library("caTools") 
    x=c(56,NA,4,6,2,1,NA,NA,NA,5,2,5,6,4,7,5,2,NA) 
    runmean(x,5)

像这样的东西

> library(zoo)
> rollapply(x, 3, mean)
 [1]       NA       NA 4.000000 3.000000       NA       NA       NA       NA       NA 4.000000 4.333333 5.000000 5.666667
[14] 5.333333 4.666667       NA

像这样的东西

> library(zoo)
> rollapply(x, 3, mean)
 [1]       NA       NA 4.000000 3.000000       NA       NA       NA       NA       NA 4.000000 4.333333 5.000000 5.666667
[14] 5.333333 4.666667       NA

这里,我定义了一个计算非
NA
元素的函数,如果它小于三个,则返回
NA
。但是,如果大于或等于3,则返回平均值

foo <- function(x)ifelse(sum(!is.na(x)) < 3, NA, mean(x, na.rm = TRUE))
给出以下结果:

#[1] 17.00  3.25  3.25  3.00    NA    NA    NA  4.00  4.50  4.40  4.80  5.40  4.80  4.50

这里,我定义了一个计算非
NA
元素的函数,如果它小于三个,则返回
NA
。但是,如果大于或等于3,则返回平均值

foo <- function(x)ifelse(sum(!is.na(x)) < 3, NA, mean(x, na.rm = TRUE))
给出以下结果:

#[1] 17.00  3.25  3.25  3.00    NA    NA    NA  4.00  4.50  4.40  4.80  5.40  4.80  4.50

你可以使用
ifelse
我想你可能已经有了答案,但是如果你展示了你想要的输出,它会有帮助。你可以使用
ifelse
我想你可能已经有了答案,但是如果你展示了你想要的输出,它会有帮助。