簡體   English   中英

用R中的列平均值替換矩陣中的無限值

[英]Replacing infinite values in a matrix with column averages in 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

我們用' NA '替換'Inf'值后的'm1'的colMeans ,然后通過創建邏輯索引('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

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

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM