R两个矩阵,根据r的公共列从m中提取行

时间:2014-06-23 14:59:21

标签: r matrix extract

我的问题是关于R的矩阵。我有两个矩阵r和m:

m <- as.matrix(read.table(text="
15 56 44 1 4 7
61 31 63 7 1 3
10 36 99 5 9 6
65 79 88 54 1 1"))
colnames(m) <- c("Z","Q","A","F","D","H")

r <- as.matrix(read.table(text="
15 56 64   
10 36 61 "))
colnames(r) <- c("Z","L","O")

我想基于公共列(在本例中为Z列)提取行,因此结果将是

A

15 56 44 1 4 7

10 36 99 5 9 6

A是新矩阵。

任何想法如何?

2 个答案:

答案 0 :(得分:0)

只是做:

> merge(x=m, y=r, by='Z')
   Z  Q  A F D H  L  O
1 10 36 99 5 9 6 36 61
2 15 56 44 1 4 7 56 64

仅保留m中的列:

> merge(x=r, y=m, by='Z', sort=FALSE)[colnames(m)]
   Z  Q  A F D H
1 15 56 44 1 4 7
2 10 36 99 5 9 6

答案 1 :(得分:0)

此外:

 indx <- intersect(colnames(m), colnames(r))
 m[m[,indx] %in% r[,indx],]
 #    Z  Q  A F D H
 #[1,] 15 56 44 1 4 7
 #[2,] 10 36 99 5 9 6