如何通过两列中的唯一(行方向)值删除重复项

时间:2017-01-13 10:43:02

标签: r

我的数据如下:

df <- data.frame(x=c("A","B","C","D"), y=c("B","A","D","C"), z=c(2,2,0.4,0.4), stringsAsFactors = F)

x    y   z
A    B   2
B    A   2
C    D   0.4
D    C   0.4

我想要的数据如下:

A    B   2
C    D   0.4

我该怎么做?

4 个答案:

答案 0 :(得分:1)

使用:

df[,1:2] <- t(apply(df[,1:2], 1, sort))
df[!duplicated(df),]

会给:

  x y   z
1 A B 2.0
3 C D 0.4

答案 1 :(得分:0)

您可以使用以下代码。

dat1 <- data.frame(X=c("A","B","C","D"),Y=c("B","A","D","C"),Z=c(2,2,0.4,0.4),stringsAsFactors = F)
dat1
  X Y   Z
1 A B 2.0
2 B A 2.0
3 C D 0.4
4 D C 0.4

让我们定义一个函数,我们可以用它来按行对记录进行排序并将其折叠成一个向量。

sort_paste <- function(x){ paste(sort(x),collapse=";") }

check_dups <- apply(dat1,1,sort_paste)
check_dups
[1] "2.0;A;B" "2.0;A;B" "0.4;C;D" "0.4;C;D"
dat1[ which(! duplicated(check_dups)), ]
  X Y   Z
1 A B 2.0
3 C D 0.4

答案 2 :(得分:0)

假设您只是尝试删除z列中的重复项:

 subset(df, !duplicated(z))

答案 3 :(得分:0)

我们可以使用pmin/pmax

library(data.table)
setDT(df)[!duplicated(pmin(x,y), pmax(x,y))]
#   x y   z
#1: A B 2.0
#2: C D 0.4