如何在 R 中对每个前 n 个值进行平均值,并且仅在大于零时(不包括"x"值)



我有这个矩阵:

矩阵=

>><1th>值7<2th>值8值9><1>3<2><5>n
值1 值2 值3值5>值6>值10
1 0 45684
2 0 0 2 9 1 8 3 0 0
n n

我们可以通过在行上循环来应用左侧第一个非零元素的rollapply。然后,对于rollapply使用FUN,在获得mean时排除零元素

library(zoo)
t(apply(matrix, 1, FUN = function(x) {
i1 <- cumsum(x != 0) > 0
x[i1] <- rollapply(x[i1], width = 4, fill = 0, align = "right", 
FUN = function(u) mean(u[u!=0]), partial = TRUE)
x}))

-输出

value1 value2 value3 value4 value5 value6 value7   value8 value9 value10
1      0      0     45   25.5   19.0  16.25   5.75 5.666667      5     4.0
2      0      0      0    2.0    5.5   4.00   5.00 5.250000      4     5.5

数据

matrix <- structure(c(0L, 0L, 0L, 0L, 45L, 0L, 6L, 2L, 6L, 9L, 8L, 1L, 
3L, 8L, 0L, 3L, 4L, 0L, 5L, 0L), .Dim = c(2L, 10L), .Dimnames = list(
c("1", "2"), c("value1", "value2", "value3", "value4", "value5", 
"value6", "value7", "value8", "value9", "value10")))

相关内容

最新更新