我在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
答案 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>