使用R中另一个data.frame中的两列重新排序一个data.frame

时间:2010-08-23 16:29:41

标签: r

我在R中有两个data.frames,其中一个有两列,另一个有三列,其中两列在两个帧之间是通用的。框架具有相同的行数。下面提供帧a和b的示例。我需要做的是使用a中的行顺序对b行重新排序。请注意,在第b帧中,前两列(id和lob)的任何唯一组合都将与val列中的唯一值相关联。这里给出的id和lob列是一个因子和一个字符,但我想要一个适用于任何数据类型的解决方案。

请注意,如果我们考虑一个框架a只有id列而框架b只有id和val列的情况,我会用

之类的东西来完成
b[match(a$id,b$id),]

不幸的是,当我需要按两列排序时,我不确定如何完成同样的事情。

一个:

  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 个答案:

答案 0 :(得分:3)

尝试使用粘贴在合并函数调用中组合您的id和lob。

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 :(得分:1)

只要a和b中的配对完美匹配,这是另一种方式:

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

第一次使用order按id和lob列对b数据帧进行排序,然后第二组(2个订单)表示重新排序b的行,以便在排序后将其返回到原始顺序。< / p>