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
Abase
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