Как вставить значения матрицы в другую большую и пустую матрицу - PullRequest
0 голосов
/ 13 декабря 2018

Заранее извините за мои митаке, я новичок в 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 голосов
/ 09 апреля 2019

Если я понимаю ваш вопрос:

  • Вы хотите заполнить вашу общую матрицу, назовем ее 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 <- lower_matrix... где result_matrix rows == rownames (меньшая_матрица)..... и столбцы result_matrix == colnames (меньший_matrix) </p>

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

Обновляет только соответствующие строки и столбцы.Остальные позиции остаются нулевыми, как вы и хотели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...