0

I want to remove duplicated rows but ignore variable names of a data frame. For example:

  dat1 = data.frame(var1 = head(letters), var2 = 1:6)
  dat1$var1 = as.character(dat1$var1)
  dat2 = data.frame(var1 = 1:4, var2 = c("a", "b", "c", "z"))
  dat = rbind(dat1, dat2)
  # > dat
  #    var1 var2
  # 1     a    1
  # 2     b    2
  # 3     c    3
  # 4     d    4
  # 5     e    5
  # 6     f    6
  # 7     1    a
  # 8     2    b
  # 9     3    c
  # 10    4    z

Expected output:

  # > dat
  #    var1 var2
  # 1     a    1
  # 2     b    2
  # 3     c    3
  # 4     d    4
  # 5     e    5
  # 6     f    6
  # 7     4    z
zx8754
  • 52,746
  • 12
  • 114
  • 209
velvetrock
  • 593
  • 1
  • 8
  • 18

2 Answers2

2

you can use

dat[!duplicated(t(apply(dat,1, sort))),]
dww
  • 30,425
  • 5
  • 68
  • 111
0

in Base R you can do:

dat[!duplicated(do.call(function(x,y)paste(pmax(x,y),pmin(x,y)),unname(dat))),]
   var1 var2
1     a    1
2     b    2
3     c    3
4     d    4
5     e    5
6     f    6
10    4    z

you can also use the igraph library:

library(igraph)
dat%>%
  graph_from_data_frame(directed = F)%>%
  E%>%
  attr("vnames")%>%
  unique%>%
  read.table(text=.,sep="|",col.names = c("var1","var2"))

 var1 var2
1    a    1
2    b    2
3    c    3
4    d    4
5    e    5
6    f    6
7    4    z
Onyambu
  • 67,392
  • 3
  • 24
  • 53