【问题标题】:R: unique combination (avoid a-b and b-a and identical such as a-a, b-b)R:唯一组合(避免 a-b 和 b-a 和相同的如 a-a、b-b)
【发布时间】:2011-12-23 07:12:24
【问题描述】:

我有以下变量列 -

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

谢谢;

【问题讨论】:

  • 我认为以下工作,library(plyr) ; ddply(mydf, .(var1), subset, var1 &lt; var2)

标签: r variables conditional unique


【解决方案1】:

更多的是自学一些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"}

【讨论】:

    【解决方案2】:

    应该这样做:

    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
    

    【讨论】:

    • 非常聪明。我喜欢这种使用排序!
    猜你喜欢
    • 1970-01-01
    • 2020-07-10
    • 1970-01-01
    • 2014-03-29
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 2015-11-28
    相关资源
    最近更新 更多