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

时间:2016-03-24 18:01:06

标签: r comparison row col

我对两个数据帧的colB进行了逐行比较(两个数据帧都有相同的有序列)我发现它们是98%相同而且两列之间的唯一区别是一些值被切换成如此:

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的所有值现在匹配?

1 个答案:

答案 0 :(得分:2)

我不认为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