多维数组操作 R

3
抱歉,我无法找到一种方法来替换三维数组中每个0为所在列的平均值。谢谢。例如,假设我有这个数组j:
j
, , 1

      [,1] [,2]
[1,]    0    6
[2,]    1    5
[3,]    2    2

, , 2

      [,1] [,2]
[1,]   11    0
[2,]   14   12
[3,]    0   14

, , 3

     [,1] [,2]
[1,]   19   22
[2,]   20   23
[3,]   21   24

I would like

j
, , 1

      [,1] [,2]
[1,]    1    6
[2,]    1    5
[3,]    2    2

, , 2

      [,1] [,2]
[1,]   11    26/3
[2,]   14   12
[3,]   25/3   14

, , 3

     [,1] [,2]
[1,]   19   22
[2,]   20   23
[3,]   21   24

1
请确保您的情况能够被重现,即向我们提供模仿您情况所需的数据和代码。有关如何做到这一点的更多提示,请参见https://dev59.com/eG025IYBdhLWcg3whGSx。 - Paul Hiemstra
1个回答

3
你可以使用apply来实现这一点。
从以下数据开始:
arr <- array(0:5,dim=c(4,3,2))

, , 1

     [,1] [,2] [,3]
[1,]    0    4    2
[2,]    1    5    3
[3,]    2    0    4
[4,]    3    1    5

, , 2

     [,1] [,2] [,3]
[1,]    0    4    2
[2,]    1    5    3
[3,]    2    0    4
[4,]    3    1    5

您可以做:

apply(arr, c(2,3),function(v) { v[v==0] <- mean(v); v})

这将提供:

, , 1

     [,1] [,2] [,3]
[1,]  1.5  4.0    2
[2,]  1.0  5.0    3
[3,]  2.0  2.5    4
[4,]  3.0  1.0    5

, , 2

     [,1] [,2] [,3]
[1,]  1.5  4.0    2
[2,]  1.0  5.0    3
[3,]  2.0  2.5    4
[4,]  3.0  1.0    5

比我之前尝试的要容易得多了...必须充分学习apply函数的威力!! - Marc in the box

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接