我对两个数据帧的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的所有值现在匹配?
答案 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