簡體   English   中英

用R中另一矩陣的值替換一個矩陣的NaN

[英]Replace NaN's of one matrix with values of another matrix in R

我有一個100 x 100的矩陣,其中有1800個由NaN表示的缺失值。 我還有另一個1800 x 1矩陣,其中包含所有這些缺失值。 我想將這些值從1800 x 1矩陣插入第一個矩陣。

我試過了;

data_matrix[is.na(data_matrix)] <- predicted_values[1,]

但這沒有用。

也許最安全的選擇是根據行/列名稱進行操作? 因為我的兩個矩陣都有對應的行/列名稱。 這是我的意思的示例:

data_matrix

  VAL.T  VAL.U  VAL.V  VAL.W
A 10.5   NaN    203    902
B 20.9   343    12     NaN
C 32     22     NaN    90
D 12     NaN    NaN    23.1

預測值

VAL.U:A 65
VAL.W:B 21
VAL.V:C 23.9
VAL.U:D 11.1
VAL.V:D 78

值在預測值中的排列順序也可能會有所幫助:即,預測值中的值的排列方式就好像我們要從data_matrix中第一行的開頭移至first_row的末尾,然后移至下一行。 這是應替換NaN值的方式。

由於predicted_values值按行然后按列存儲值,而矩陣通常按列存儲它們的值,因此您應該進行轉置。

a=t(data_matrix)
a[is.na(a)]=predicted_values[,1]
data_matrix=t(a)

使用一個兩列矩陣,該矩陣是通過將第一個predval列作為“ [<-”的第一個(單個)參數以及將predval的第二列作為第二個參數而構建的:

idxm <- cbind( sapply( strsplit(as.character(predval$V1), ":"), "[",2), 
                 sapply( strsplit(as.character(predval$V1), ":"), "[",1) )
dtm[ idxm ] <- predval$V2
dtm
#-----------
  VAL.T VAL.U VAL.V VAL.W
A  10.5  65.0 203.0 902.0
B  20.9 343.0  12.0  21.0
C  32.0  22.0  23.9  90.0
D  12.0  11.1  78.0  23.1



dput(predval)
structure(list(V1 = structure(c(1L, 5L, 3L, 2L, 4L), .Label = c("VAL.U:A", 
"VAL.U:D", "VAL.V:C", "VAL.V:D", "VAL.W:B"), class = "factor"), 
    V2 = c(65, 21, 23.9, 11.1, 78)), .Names = c("V1", "V2"), class = "data.frame", row.names = c(NA, 
-5L))

dput(dtm)
structure(c(10.5, 20.9, 32, 12, 65, 343, 22, 11.1, 203, 12, 23.9, 
78, 902, 21, 90, 23.1), .Dim = c(4L, 4L), .Dimnames = list(c("A", 
"B", "C", "D"), c("VAL.T", "VAL.U", "VAL.V", "VAL.W")))

暫無
暫無

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

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