R: уникальная комбинация (избегайте a-b и b-a и идентичные, такие как a-a, b-b) - PullRequest
2 голосов
/ 07 ноября 2011

У меня есть следующие переменные столбцы -

var1 <- c("a", "b", "a", "a", "c", "a", "b", "b", "c", "b", "c", "c", "d")
var2 <- c("a", "a", "b", "c", "a", "d", "b", "c", "b", "d", "c", "d", "d")
mydf <- data.frame(var1, var2)

Я хочу найти уникальную комбинацию переменных, такую, что

(a) var1 a-  var2 b and var1 b- var2 a are not considered unique.  
(b) no identical combination are present - 
      for example var1 a and var2 a, var1 b and var2 b

Я использовал следующие коды, не предоставляя, что яожидание:

unique(mydf)
   var1 var2
1     a    a
2     b    a
3     a    b
4     a    c
5     c    a
6     a    d
7     b    b
8     b    c
9     c    b
10    b    d
11    c    c
12    c    d
13    d    d

Мой ожидаемый результат:

  var1 var2
1     a    b
2     a    c
3     a    d
4     b    c
5     b    d
6     c    d

спасибо;

Ответы [ 2 ]

3 голосов
/ 07 ноября 2011

Это должно сделать это:

mydf = mydf[mydf[,1] != mydf[,2], ]
mydf = mydf[!duplicated(data.frame(t(apply(mydf, 1, sort)))), ]
> mydf
   var1 var2
2     b    a
4     a    c
6     a    d
8     b    c
10    b    d
12    c    d
0 голосов
/ 07 ноября 2011

Больше упражнений, чтобы научить себя некоторому sets поведению пакета:

require(sets)
mydf <- data.frame(var1, var2, stringsAsFactors=FALSE)  # unneeded factors are a plague on R/S
dlis <- list(); 
for (i in seq(nrow(mydf)) ) { 
                  if( length(set(mydf[i,1], mydf[i,2]) )==2 ) {
                         dlis <- c( dlis, list(set(mydf[i,1], mydf[i,2])) 
                    )       }                                  }
 unique(dlis)
[[1]]
{"a", "b"}

[[2]]
{"a", "c"}

[[3]]
{"a", "d"}

[[4]]
{"b", "c"}

[[5]]
{"b", "d"}

[[6]]
{"c", "d"}
...