2013-10-25 4 views
-1

Я программирование в 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$x1 или b$x1. Если x1 матрицы b совпадает с любым x1 или x2 в a, то он должен оставаться в матрице b. Матрицы также имеют другие столбцы, но они не интересны для этой операции.

Может кто-нибудь мне помочь?

+0

Пожалуйста, прочтите [здесь] (http://stackoverflow.com/questions/5963269/how- to-make-a-great-r-reproducible-example/5963610 # 5963610) о том, как сделать ваши фиктивные данные доступными для людей, которые хотят вам помочь. Пожалуйста, также покажите, что вы пробовали. [Вопросы, требующие кода, должны включать в себя попытки решения, почему они не работают и ожидаемые результаты] (http://stackoverflow.com/help/on-topic). Благодаря! – Henrik

ответ

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 

И иметь в виду, что как «а» и «б» должны быть матрицы и, кроме того, , результат этой функции приведет к матрице с меньшим количеством строк, вы можете легко расширить операцию, если у вас больше столбцов.

EDIT

ОК, не большая проблема, но вы указали, что оба, где матрицы или, возможно, я неправильно понял, что угодно. Я редактирую с той же операцией с кадрами данных, но все же оставляю матрицы для тех, кто в ней нуждается.

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

Вы также можете установить указатель быть как b[[index]] вместо использования имен встроенных в системе отсчета данных

Смежные вопросы