对不起,我很抱歉,我是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)
答案 0 :(得分:0)
result_matrix
smaller_matrix
中的数据result_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
这只会更新匹配的行和列。根据需要,其余职位保持为零。