在R中考虑两列的唯一行,没有顺序

efl*_*s89 6 r unique plyr dplyr

与我发现的问题不同,我希望得到两个没有顺序的列的唯一.

我有一个df:

df<-cbind(c("a","b","c","b"),c("b","d","e","a"))
> df
     [,1] [,2]
 [1,] "a"  "b" 
 [2,] "b"  "d" 
 [3,] "c"  "e" 
 [4,] "b"  "a" 
Run Code Online (Sandbox Code Playgroud)

在这种情况下,在ba与ba相同的意义上,第1行和第4行是"重复".

我知道如何找到第1列和第2列的唯一,但我会发现在这种方法下每行都是唯一的.

A5C*_*2T1 9

如果它只是两列,你也可以使用pminpmax,像这样:

library(data.table)
unique(as.data.table(df)[, c("V1", "V2") := list(pmin(V1, V2),
                         pmax(V1, V2))], by = c("V1", "V2"))
#    V1 V2
# 1:  a  b
# 2:  b  d
# 3:  c  e
Run Code Online (Sandbox Code Playgroud)

使用"dplyr"的类似方法可能是:

library(dplyr)
data.frame(df, stringsAsFactors = FALSE) %>% 
  mutate(key = paste0(pmin(X1, X2), pmax(X1, X2), sep = "")) %>% 
  distinct(key)
#   X1 X2 key
# 1  a  b  ab
# 2  b  d  bd
# 3  c  e  ce
Run Code Online (Sandbox Code Playgroud)


jim*_*myb 7

有很多方法可以做到这一点,这里有一个:

unique(t(apply(df, 1, sort)))
duplicated(t(apply(df, 1, sort)))
Run Code Online (Sandbox Code Playgroud)

一个给出唯一的行,另一个给出掩码.