R - 如何使用数据子集重新排列整行

R - How to rearrange entire rows using subset of data

我对 2 个数据帧的 colB 进行了逐行比较(两个数据帧具有相同的有序列)我发现它们 98% 相同,2 列之间的唯一区别是一些值对被切换像这样:

df1$colB   df2$colB
   A          B
   B          A
   1          1 
   C          D 
   D          C

我取了 df1$colB 不等于 df2$colB 的子集

subset(df1, df1$colB != df2$colB)

有没有一种方法可以使用上面子集中出现的行来重新排列 df1 的所有行,以便 df1$colB 和 df2$colB 中的所有值现在都匹配?

我认为 subset 不适合此功能。它需要一个逻辑向量作为第二个参数,(令人困惑地)也命名为 "subset",因此没有排序能力。而是使用 match[:

 df1[ match(df1$colB,  df2$colB), ]
  X1.5 colB
2    2    B
1    1    A
3    3    1
5    5    D
4    4    C

但是在使用稍微复杂一点的 df2 版本进行测试后,它在 colB 中有 NA 和其他值,我决定 @Ananta 的 merge 建议是更安全的方法(但 df2 作为获得所需顺序的第一个参数):

> merge( df2,df1)[ names(df1) ]
  X1.5 colB
1    3    1
2    1    A
3    2    B
4    4    C
5    5    D