如何在另一个又大又空的矩阵中插入矩阵的值

时间:2018-12-13 12:29:43

标签: r matrix

对不起,我很抱歉,我是R新手。

我想比较不同大小的行为序列的频率跃迁矩阵。因此,我决定对所有不同矩阵中的所有行为序列求和,以构建一个通用矩阵。现在,我想将矩阵的值插入到这个通用矩阵中,如下所示:

1-通用矩阵:

   A    B    C    D    E    F
A
B
C
D
E
F

2-具有值的矩阵:

    A    C    F
A   0    0.2  0.1
C   0.1  0    0
F   0    0.3  0

3-新矩阵:

    A    B    C    D    E    F
A   0    0    0.2  0    0    0.1
B   0    0    0    0    0    0
C   0.1  0    0    0    0    0
D   0    0    0    0    0    0
E   0    0    0    0    0    0
F   0    0    0.3  0    0    0

所以我尝试了一个小脚本,但是它不起作用。

####
Tab=read.table("XX.csv", header=T, sep=";")
Tab_matrix = as.matrix(Tab);
Tab_col=read.table("Column.csv", header=F, sep=";");
rownames(Tab_matrix) <- Tab_col[1:125,1];

####
Tab_final=read.table("XX_Final.csv", header=T, sep=";");
Tab_matrix_final = as.matrix(Tab_final);
Tab_col_final=read.table("Column_Final.csv", header=F, sep=";");
rownames(Tab_matrix_final) <- Tab_col_final[1:2682,1];
Tab_matrix_final[is.na(Tab_matrix_final)] <- 0

####
y1 <- list(cbind(Tab_matrix),cbind(Tab_matrix_final));
library(data.table)
y2<- rbindlist(lapply(y1, as.data.table), fill = TRUE);
y2[is.na(y2)] <- 0
storage.mode(y2) <- "numeric"
d <- as.data.frame(y2)

1 个答案:

答案 0 :(得分:0)

如果我理解您的问题:

  • 您要填充常规矩阵,我们称其为result_matrix
  • 具有行名和列名匹配的smaller_matrix中的数据
  • result_matrix的其余部分应填充零

如果正确,那么:

假设您的small_matrix具有以下数据:

smaller_matrix <- as.matrix( read.table( header = TRUE, 
                                         text = '    A    C    F
                                                 A   0    0.2  0.1
                                                 C   0.1  0    0
                                                 F   0    0.3  0') )
smaller_matrix

    A   C   F
A 0.0 0.2 0.1
C 0.1 0.0 0.0
F 0.0 0.3 0.0

要解决此问题,您可以:

1)用您定义的行+列名称预创建result_matrix =全零数字矩阵。

例如:

column_names <- LETTERS[1:6]
row_names    <- LETTERS[1:6]
result_matrix <- matrix( as.numeric(0.0), 
                         nrow=length(row_names), 
                         ncol=length(column_names), 
                         dimnames = list(row_names, column_names) )

2)然后,通过匹配行名和列名,您可以简单地:

设置result_matrix <-更小的矩阵
...其中result_matrix行==行名(smaller_matrix)
.....和result_matrix列== colnames(smaller_matrix)

result_matrix[ rownames(smaller_matrix), colnames(smaller_matrix)] <- smaller_matrix

result_matrix

    A B   C D E   F
A 0.0 0 0.2 0 0 0.1
B 0.0 0 0.0 0 0 0.0
C 0.1 0 0.0 0 0 0.0
D 0.0 0 0.0 0 0 0.0
E 0.0 0 0.0 0 0 0.0
F 0.0 0 0.3 0 0 0.0

这只会更新匹配的行和列。根据需要,其余职位保持为零。

相关问题