我有一组两种顺序的对,例如A01-B 01,B 01-A01。但是我想只保留每个对的一个示例,基于另一列。
A = c("A01", "A01", "B01", "B02", "C03", "B01")
B = c("A02", "B01", "C03", "C03", "B01", "A01")
C = c(3, 4, 5, 2, 5, 3)
df <- tibble(A,B,C)
# A tibble: 6 × 3
A B C
<chr> <chr> <dbl>
1 A01 A02 3
2 A01 B01 4
3 B01 C03 5
4 B02 C03 2
5 C03 B01 5
6 B01 A01 3
我想保留C中具有较高值的对。在C中有平局的情况下,按字母顺序保留A列的行。
我想做的一部分
df <- df %>%
filter(A == B & B == A & C < C)
但这并不起作用,因为它卡在同一行上(我假设)。尝试使用%in%
,但匹配得太松散。还没有完全将我的思想围绕rowwise
或across
将如何解决这个问题。
我的预期输出是,并会更喜欢一个解决方案,使用dplyr管道,以适应与其余的我的分析,如果可能的话。
A B C
1 A01 A02 3
2 A01 B01 4
3 B01 C03 5
4 B02 C03 2
3条答案
按热度按时间qyswt5oh1#
这里我定义了一个组,其中B 01-A01被放入A01-B 01组(任意按字母顺序表示这对),所以我们可以一起查看它们。
pmin
是一个矢量化的min
,所以pmin(A,B)
将为每行输出A和B中较小的值(按字母顺序)。结果
mcvgt66p2#
我想这可以回答你的问题。
w8f9ii693#
试试这个
首先,我定义了一个函数来获取两个字符串,对它们进行排序,然后将它们粘贴在一起。这个函数的功能是使(A,B)==(B,A)。然后,按组合变量进行分组,并将具有最高值的行保留在C中。这仍然会返回重复项,因此我们可以按A排序并删除重复项。
结果