删除矩阵中不在另一个矩阵中的所有行

时间:2013-10-25 20:37:07

标签: r matrix delete-row

我在R编程,我有两个矩阵,比如这个

a:    x1     x2                 b:   x1
      5      3                       3
      5      10                      5
      7      3                       7 
      7      140                     8
      10     152                     10
      ...    ...                     ...

我想删除b中的所有行,其中b$x1与任何a$x1b$x1都不相同。如果矩阵x1的{​​{1}}与b中的任何x1x2相同,则它应保留在矩阵a中。矩阵也有其他列,但它们对此操作并不感兴趣。

有人能帮助我吗?

1 个答案:

答案 0 :(得分:2)

我不确定如果我已经正确理解你在问什么,但你可以尝试那样

> a
     x1  x2
[1,]  5   3
[2,]  5  10
[3,]  7   2
[4,]  7 140
[5,] 10 152

> b
     x1
[1,]  3
[2,]  5
[3,]  7
[4,]  8
[5,] 10

> as.matrix(b[which(b %in% a[,c(1,2)])])

         [,1]
    [1,]    3
    [2,]    5
    [3,]    7
    [4,]   10

请记住,“a”和“b”都必须是矩阵,而且,该函数的结果将导致行数较少的矩阵,如果有更多列,则可以轻松扩展操作。

修改

好的,没有什么大不了的问题,但是您指定了矩阵或者我可能误读的内容。我使用相同的操作编辑数据框,但仍然为任何需要它的人留下了矩阵。

> subset(b, b$x1 %in% c(a$x1,a$x2))
  x1
1  3
2  5
3  7
5 10

您还可以将索引建立为b[[index]],而不是使用名称内置数据框引用