我有这个矩阵:
矩阵=
值1 | 值2 | 值3 | >值5 | >>值6 | <1th>值7<2th>值8值9>值10 | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 0 | 45 | >6 | 8 | <1>3<2>4 | <5>|||||||
2 | 0 | 0 | 2 | 9 | 1 | 8 | 3 | 0 | 0 | |||
n | 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")))