Переупорядочить один data.frame, используя два столбца из другого data.frame в R - PullRequest
1 голос
/ 23 августа 2010

У меня есть два data.frames в R, один из которых имеет два столбца, а другой - три столбца, и два столбца являются общими для двух кадров.Кадр имеет одинаковое количество строк.Пример кадров a и b приведен ниже.Что мне нужно сделать, это изменить порядок строк b, используя порядок строк в.Обратите внимание, что в кадре b любая уникальная комбинация первых двух столбцов, id и lob, будет связана с уникальным значением в столбце val.Столбцы id и lob, приведенные здесь, являются фактором и символом, но я бы хотел, чтобы решение работало для любого типа данных.

Обратите внимание, что если бы мы рассмотрели случай, когда frame a только что имел столбец id ив кадре b только что были столбцы id и val, я бы выполнил это с помощью чего-то вроде

b[match(a$id,b$id),]

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

a:

  id lob
1 1+   X
2  3   X
3  2   X
4  1   X
5  1   Y
6 1+   Y
7 1+   X
8  3   X
9  3   X

b:

  id lob val
1 1+   X   1
2 1+   Y   9
3 1+   X   1
4  3   X   5
5  3   X   5
6  3   X   5
7  2   X   4
8  1   X   3
9  1   Y   2

Я хочу получить это:

  id lob val
1 1+   X   1
2  3   X   5
3  2   X   4
4  1   X   3
5  1   Y   2
6 1+   Y   9
7 1+   X   1
8  3   X   5
9  3   X   5

Ответы [ 2 ]

3 голосов
/ 23 августа 2010

Попробуйте использовать вставить, чтобы объединить ваш идентификатор и группу в вызове функции слияния.

b[match(paste(a$id,a$lob), paste(b$id,b$lob)),]


    id lob val
1   1+   X   1
4    3   X   5
7    2   X   4
8    1   X   3
9    1   Y   2
2   1+   Y   9
1.1 1+   X   1
4.1  3   X   5
4.2  3   X   5
1 голос
/ 25 августа 2010

Вот еще один способ, если пары в a и b идеально совпадают:

b[order(b$id,b$lob), ][ order(order(a$id,a$lob)), ]

При первом использовании порядка сортируется кадр данных b по столбцам id и lob, затем второй набор (2 порядка) говорит, переупорядочить строки b, таким образом, что после сортировки будет возвращаться обратно в исходный порядок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...