我有一个100 x 100矩阵,其中包含由NaN
表示的1800个缺失值。我有另一个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
predicted_values
VAL.U:A 65
VAL.W:B 21
VAL.V:C 23.9
VAL.U:D 11.1
VAL.V:D 78
值在predict_values中排列的顺序也可能有用:即predict_values中的值的排列方式就好像我们从data_matrix中的第一行开头移动到first_row的末尾然后移动到下一行。这是应该替换NaN值的方式。
答案 0 :(得分:2)
由于predicted_values
按行然后列存储值,而矩阵通常按列存储它们的值,您应该进行转置。
a=t(data_matrix)
a[is.na(a)]=predicted_values[,1]
data_matrix=t(a)
答案 1 :(得分:1)
使用一个双列矩阵,将第一个预测列作为第一个(单个)参数分割为“[&lt; - ”,将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")))