让我有一个这样的3x4矩阵(比方说m):

4  inf  12   6
1  8    inf  42
5  1    3    11


我想用列平均值替换无限个单元格。如何使用R做到这一点?

因此,结果矩阵必须为:

4  4.5  12   6
1  8    7.5  42
5  1    3    11

最佳答案

在用colMeans替换'Inf'值后,我们将'm1'的NA,然后通过创建逻辑索引('i1')将这些值分配到'Inf'值所在的位置

cm <- colMeans(replace(m1, is.infinite(m1), NA), na.rm = TRUE)
i1 <- is.infinite(m1)
m1[i1] <- cm[col(m1)][i1]
m1
#     [,1] [,2] [,3] [,4]
#[1,]    4  4.5 12.0    6
#[2,]    1  8.0  7.5   42
#[3,]    5  1.0  3.0   11




或者可以使用na.aggregate中的zoo在一行中完成

zoo::na.aggregate(replace(m1, is.infinite(m1), NA))


数据

m1 <- structure(c(4, 1, 5, Inf, 8, 1, 12, Inf, 3, 6, 42, 11), .Dim = 3:4)

关于r - 用R中的列平均值替换矩阵中的无穷大值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46991370/

10-12 20:39