我在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 Xb:
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发布于 2010-08-24 01:14:46
尝试使用paste在merge函数调用中组合您的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发布于 2010-08-26 00:22:54
这是另一种方法,只要a和b中的配对完全匹配:
b[order(b$id,b$lob), ][ order(order(a$id,a$lob)), ]order的第一次使用是按id和lob列对b数据帧进行排序,然后第二组(2阶)表示对B的行进行重新排序,其方式是在排序后将A取消排序回到其原始顺序。
https://stackoverflow.com/questions/3549593
复制相似问题