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