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