Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用R中另一个data.frame的两列对一个data.frame重新排序_R - Fatal编程技术网

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

使用R中另一个data.frame的两列对一个data.frame重新排序,r,R,我在R中有两个data.frames,其中一个有两列,另一个有三列,其中两列在两个帧之间是公共的。框架的行数相同。下面提供帧a和b的示例。我需要做的是使用a中的行顺序对b中的行重新排序。请注意,在帧b中,前两列id和lob的任何唯一组合都将与val列中的唯一值相关联。这里给出的id和lob列是一个factor和一个character,但我希望有一个适用于任何数据类型的解决方案 注意,如果我们考虑一个框架A只有ID列,而框架B只有ID和VAR列的情况,那么我会用类似于的方式来完成这一情况。 b[m

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

注意,如果我们考虑一个框架A只有ID列,而框架B只有ID和VAR列的情况,那么我会用类似于

的方式来完成这一情况。
b[match(a$id,b$id),]
不幸的是,当我需要按两列排序时,我不确定如何完成同样的事情

a:

b:

我想得到这个:

  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

尝试使用“粘贴”在合并函数调用中组合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

尝试使用“粘贴”在合并函数调用中组合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

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

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

第一次使用order按id和lob列对b数据帧进行排序,然后第二次使用set 2 orders表示对b行进行重新排序,排序后会将a重新排序为其原始顺序。

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

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

第一次使用order按id和lob列对b数据帧进行排序,第二次使用set 2 orders表示对b的行进行重新排序,排序后会将a重新排序回其原始顺序。

它定义得好吗?id、lob组合似乎不是唯一定义行的。Aniko-可以有重复的行,但这不应该是一个问题,就像您希望对具有重复值的数字向量进行排序一样。注意,对于任何给定的id,lob tuple只有一个val值;i、 你不能有1+,X,5和1+,X,3。如果不是这样的话,这将是一个问题。它甚至定义得很好吗?id、lob组合似乎不是唯一定义行的。Aniko-可以有重复的行,但这不应该是一个问题,就像您希望对具有重复值的数字向量进行排序一样。注意,对于任何给定的id,lob tuple只有一个val值;i、 你不能有1+,X,5和1+,X,3。如果不是这样的话,这将是一个问题。您创建假连接的风险很小。例如:a.id=ab,a.lob=c,b.id=a,b.lob=bc。但只有当你不知道你的数据时才会发生。谢谢布莱恩,你解决了我的问题。为了更加安全,我们可以添加一个独特的分隔符来处理Marek提到的情况。创建虚假连接的风险很小。例如:a.id=ab,a.lob=c,b.id=a,b.lob=bc。但只有当你不知道你的数据时才会发生。谢谢布莱恩,你解决了我的问题。为了更加安全,我们可以添加一个独特的分隔符来处理Marek提到的情况。