R 仅删除一行具有条件的重复行

R 仅删除一行具有条件的重复行,r,R,我的数据框比这个大得多 但我想要的想法是 x = data.frame( A= c(3, 4, 5, 7,9), B= c(7, 8, 9, 3,5), C= c(11, 12, 13, 14,18) ) 我认为第1行和第4行是相同的,因为对我来说,(3,7)和(7,3)是相同的(对(5,9)和(9,5))。根据这个标准,我只想留下一双 结果应该是: x = data.frame( A= c(3, 4, 5), B= c(7, 8, 9), C= c(1

我的数据框比这个大得多

但我想要的想法是

x = data.frame(
 A= c(3, 4, 5, 7,9),
 B= c(7, 8, 9, 3,5),
 C= c(11, 12, 13, 14,18)
 )
我认为第1行和第4行是相同的,因为对我来说,(3,7)和(7,3)是相同的(对(5,9)和(9,5))。根据这个标准,我只想留下一双

结果应该是:

 x = data.frame(
     A= c(3, 4, 5),
     B= c(7, 8, 9),
     C= c(11, 12, 13)
     )
我该怎么做

是否可以使用函数
子集

库(dplyr)执行此操作
library(dplyr)

x <- x %>%
  group_by(A, B) %>%
  mutate(AB = paste0(min(A, B), max(A, B)))

x[!duplicated(x$AB), -4]

# # A tibble: 3 x 3
# # Groups:   A, B [3]
#       A     B     C
#   <dbl> <dbl> <dbl>
# 1     3     7    11
# 2     4     8    12
# 3     5     9    13
x% (A,B)组%>% 变异(AB=0(最小值(A,B),最大值(A,B))) x[!重复(x$AB),-4] ##tibble:3 x 3 ##组:A、B[3] #A、B、C # # 1 3 7 11 # 2 4 8 12 # 3 5 9 13
A
base
R解决方案。使用
ifelse
paste0
创建组合
a
B
的变量,并将最小值放在第一位。然后您可以使用
duplicated
来识别重复的值和子集

index <- ifelse(x$A<x$B, paste0(x$A, '-', x$B), paste0(x$B, '-', x$A))
index

[1] "3-7" "4-8" "5-9" "3-7" "5-9"

x[!duplicated(index),]

  A B  C
1 3 7 11
2 4 8 12
3 5 9 13

这里有一个
base R
选项,其中
pmin/pmax
重复

x[!duplicated(with(x, pmin(A, B), pmax(A, B))),]
   A B  C
#1 3 7 11
#2 4 8 12
#3 5 9 13

谢谢它起作用了。无法使用subset函数实现此目的?在堆栈溢出时一切都是可能的:)我相信有专家会想出更有效的解决方案,无论是否使用
subset
。这只是突然出现在我脑海中的一种可能的方式。
x[!duplicated(with(x, pmin(A, B), pmax(A, B))),]
   A B  C
#1 3 7 11
#2 4 8 12
#3 5 9 13