R: добавить матрицы на основе имен строк и столбцов
У меня есть две матрицы, которые я хочу суммировать на основе их имен строк и столбцов. Матрицы не обязательно будут иметь все общие строки и столбцы - некоторые могут отсутствовать в любой матрице.
Например, рассмотрим две матрицы A и B:
A= B=
a b c d a c d e
v 1 1 1 0 v 0 0 0 1
w 1 1 0 1 w 0 0 1 0
x 1 0 1 1 y 0 1 0 0
y 0 1 1 1 z 1 0 0 0
Столбец e отсутствует в матрице A, а столбец b отсутствует в матрице B. Строка z отсутствует в матрице A, а строка x отсутствует в матрице B.
Сводная таблица, которую я ищу:
Sum=
a b c d e
v 1 1 1 0 1
w 1 1 0 2 0
x 1 0 1 1 na
y 0 1 2 1 0
z 1 na 0 0 0
Порядок строк и столбцов в окончательной матрице не имеет значения, пока матрица заполнена, то есть имеет все данные. Пропущенные значения не обязательно должны быть «Na», но вместо этого могут быть «0».
Я не уверен, есть ли способ сделать это, который не включает циклы. Любая помощь приветствуется.
Мое решение
Мне удалось сделать это легко, преобразовав матрицы в кадры данных, связав кадры данных по строкам, а затем преобразовав получившийся кадр данных обратно в матрицу. Похоже, что это работает, но, возможно, кто-то может проверить еще раз или дать мне знать, если есть лучший способ.
library(reshape2)
A_df=as.data.frame(as.table(A))
B_df=as.data.frame(as.table(B))
merged_df=rbind(A_df,B_df)
Summed_matrix=acast(merged_df, Var1 ~ Var2, sum)
merged_df выглядит так:
Var1 Var2 Freq
1 v a 1
2 w a 1
3 x a 1
4 y a 0
5 v b 1
6 w b 1
etc...