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
我对 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