【问题标题】:How to insert values of a matrix in another large and empty matrix如何在另一个大的空矩阵中插入矩阵的值
【发布时间】:2018-12-13 12:29:42
【问题描述】:

对不起,我是 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)

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    如果我理解你的问题:

    • 你想填充你的通用矩阵,我们称之为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 ... where result_matrix rows == rownames(smaller_matrix)
    .....and result_matrix columns == 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
    

    这只会更新匹配的行和列。如您所愿,其余位置保持为零。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多