首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用R中另一个data.frame中的两列对一个data.frame进行重新排序

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

Stack Overflow用户
提问于 2010-08-24 00:29:41
回答 2查看 2K关注 0票数 1

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

请注意,如果我们考虑这样一种情况,即框架a只有id列,而框架b只有id和val列,我将使用以下内容来完成此操作

代码语言:javascript
复制
b[match(a$id,b$id),]

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

答:

代码语言:javascript
复制
  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:

代码语言:javascript
复制
  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

我想要得到这个:

代码语言:javascript
复制
  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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-24 01:14:46

尝试使用paste在merge函数调用中组合您的id和lob。

代码语言:javascript
复制
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
票数 4
EN

Stack Overflow用户

发布于 2010-08-26 00:22:54

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

代码语言:javascript
复制
b[order(b$id,b$lob), ][ order(order(a$id,a$lob)), ]

order的第一次使用是按id和lob列对b数据帧进行排序,然后第二组(2阶)表示对B的行进行重新排序,其方式是在排序后将A取消排序回到其原始顺序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3549593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档