用R中的列平均值替换矩阵中的无限值

时间:2017-10-28 15:30:53

标签: r

让我有这样一个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

1 个答案:

答案 0 :(得分:8)

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

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)