按列名合并两个矩阵

时间:2014-08-16 18:29:11

标签: r merge

我有

mat1 <- matrix(c(1,2,3,4,5,6), ncol=2)
colnames(mat1) <- c("Soa","Nor")
mat2 <- matrix(c(1,0,1,1,0), nrow=1)
colnames(mat2) <- c("reman","jak","Soa","Alein","Nor")

我需要得到这个矩阵

Soa    Nor
1       4
2       5
3       6
1       0

我使用它但不适用于列

merge(mat1,mat2, by="row.names", all = TRUE)

2 个答案:

答案 0 :(得分:3)

rbind更简单。您可以使用mat2提取colnames(mat1)的相关列,然后将它们绑定在一起。

> rbind(mat1, mat2[, colnames(mat1)])
#     Soa Nor
#[1,]   1   4
#[2,]   2   5
#[3,]   3   6
#[4,]   1   0

答案 1 :(得分:1)

如果你想坚持使用merge,你可以试试这个:

samecols <- intersect(colnames(mat1),colnames(mat2))
merge(mat1,mat2, by=samecols, all=TRUE)[samecols]

与您的代码的区别在于,by是两个矩阵共享的列名称向量。正如@akrun在他的评论中指出的那样,使用rbind通过以相同方式引用列来实现同样的目的。

相关问题