8

後で使用するために、可能なすべての組み合わせで 3 つの異なるビンに割り当てたい 7 つの異なる希釈を含むデータ フレームがありますlpSolve。以下を使用して、2187 の可能な組み合わせをすべて生成できます。

expand.grid(1:3, 1:3, 1:3, 1:3, 1:3, 1:3, 1:3)

ただし、実際のビン番号は重要ではない (位置は重要) ため、このコンテキストでは次のエントリはすべて同一と見なされます。

c(1, 1, 2, 2, 2, 3, 3)
c(2, 2, 3, 3, 3, 1, 1)
c(3, 3, 1, 1, 1, 2, 2)
c(3, 3, 2, 2, 2, 1, 1)
c(1, 1, 3, 3, 3, 2, 2)
...

expand.grid出力をフィルタリングするか、別の (カスタム) 関数を使用して、一意の「パターン」のみを生成するにはどうすればよいですか。たとえばrle、上記のすべてのベクトルから出力される長さは になりますが、上記と同一と見なされるべきではない2 3 2場合もあります。c(1, 1, 2, 2, 2, 1, 1)

これを回避する簡単な方法はありますか?5 ビンと 8 希釈を超える必要はありません。

4

3 に答える 3

2

これ?

data <- expand.grid(1:3, 1:3, 1:3, 1:3, 1:3, 1:3, 1:3)
len <- apply(data,1,function(x) c(rle(x)$lengths[1:7], nchar(paste(unique(sort(rle(x)$value)), collapse=''))))
data <- data[!(duplicated(t(len))), ]

または、@Arunが指摘したように:

data <- expand.grid(1:3, 1:3, 1:3, 1:3, 1:3, 1:3, 1:3)
len <- apply(data,1,function(x) c(rle(x)$lengths[1:7], length(unique(x))))
data <- data[!(duplicated(t(len))), ]
于 2013-03-07T11:30:23.860 に答える
2

ここに答えがあります:

mat <- expand.grid(1:3, 1:3, 1:3, 1:3, 1:3, 1:3, 1:3)

mat <- t(apply(mat, 1, 
               function(x){
                 un <- unique(x)
                 map <- setNames(1:length(un), un)
                 map[as.character(x)]
               }))

mat <- mat[!duplicated(mat), ]
nrow(mat)
# [1] 365

ロジックは次のとおりです。c(3,3,1,2,1,2,3)を に変換します。 は最初から最初の一意の番号、c(1,1,2,3,2,3,1)は2 番目、は 3 番目の番号です。このようにして、すべての行を同じ形式に変換すると、. ここで役に立ちました。ある整数セットから別の整数セットへのマップを作成します。312duplicatedsetNames

setNames(1:3,3:1)
3 2 1 
1 2 3 
setNames(1:3,3:1)[c("2","1")]
2 1 
2 3 

最後に、証明:

ここに画像の説明を入力

これは、1 つ、2 つ、または 3 つの異なる数値が使用される場合を考慮に入れています。具体的には、[(1 つの数字が 7 つの位置すべてを占める)] + [(1 つの数字に対して 1 つの位置を選択し、残りのすべてを別の数字にする) + (1 つの数字に対して 2 つの位置を選択し、残りのすべてを別の数字にする) + ( 3 つの位置で、残りはすべて別のものです)] + [(最初の数字に 1 つの位置を選択し、2 番目に 1 つの位置を選択し、残りはすべて 3 番目の数字に使用します。1 番目と 2 番目は同じと見なされ、両方が発生します。ので、この項を 2 で割る必要があります) + ...(前と同じロジック)...]

于 2013-03-07T11:46:53.223 に答える
1

それは組み合わせ論の質問IMOです。

7つの要素の場合、最初に2つを選択し、残りの5つから2つを選択すると、合計210の組み合わせが得られると思います.

組み合わせ 11 22 333 が 22 11 333 と同じであることを指摘した Arun のおかげで、最初の 2 つの要素は交換可能な要素であるため、必要な組み合わせの数は 210 の半分、つまり 105 であると推測できます。

library(gtools)

# Let's create all possible permutations of 7 elements which will be equal to 7!
p <- permutations(7, 7, 1:7)

head(p)
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7]
## [1,]    1    2    3    4    5    6    7
## [2,]    1    2    3    4    5    7    6
## [3,]    1    2    3    4    6    5    7
## [4,]    1    2    3    4    6    7    5
## [5,]    1    2    3    4    7    5    6
## [6,]    1    2    3    4    7    6    5


# bin, sort and combine according to our binning vector c(1,1,2,2,3,3,3)
rp <- t(apply(p, 1, FUN = function(x) as.numeric(sapply(split(x, c(1, 1, 2, 2, 3, 3, 3)), FUN = function(x) paste0(x[order(x)], collapse = "")))))

head(rp)
##      [,1] [,2] [,3]
## [1,]   12   34  567
## [2,]   12   34  567
## [3,]   12   34  567
## [4,]   12   34  567
## [5,]   12   34  567
## [6,]   12   34  567


# sort individual combinations before removing duplicates
srp <- t(apply(rp, 1, function(x) x[order(x)]))

head(srp)
##      [,1] [,2] [,3]
## [1,]   12   34  567
## [2,]   12   34  567
## [3,]   12   34  567
## [4,]   12   34  567
## [5,]   12   34  567
## [6,]   12   34  567


# remove duplicates
srp[!duplicated(srp), ]
##        [,1] [,2] [,3]
##   [1,]   12   34  567
##   [2,]   12   35  467
##   [3,]   12   36  457
##   [4,]   12   37  456
##   [5,]   12   45  367
##   [6,]   12   46  357
##   [7,]   12   47  356
##   [8,]   12   56  347
##   [9,]   12   57  346
##  [10,]   12   67  345
##  [11,]   13   24  567
##  [12,]   13   25  467
##  [13,]   13   26  457
##  [14,]   13   27  456
##  [15,]   13   45  267
##  [16,]   13   46  257
##  [17,]   13   47  256
##  [18,]   13   56  247
##  [19,]   13   57  246
##  [20,]   13   67  245
##  [21,]   14   23  567
##  [22,]   14   25  367
##  [23,]   14   26  357
##  [24,]   14   27  356
##  [25,]   14   35  267
##  [26,]   14   36  257
##  [27,]   14   37  256
##  [28,]   14   56  237
##  [29,]   14   57  236
##  [30,]   14   67  235
##  [31,]   15   23  467
##  [32,]   15   24  367
##  [33,]   15   26  347
##  [34,]   15   27  346
##  [35,]   15   34  267
##  [36,]   15   36  247
##  [37,]   15   37  246
##  [38,]   15   46  237
##  [39,]   15   47  236
##  [40,]   15   67  234
##  [41,]   16   23  457
##  [42,]   16   24  357
##  [43,]   16   25  347
##  [44,]   16   27  345
##  [45,]   16   34  257
##  [46,]   16   35  247
##  [47,]   16   37  245
##  [48,]   16   45  237
##  [49,]   16   47  235
##  [50,]   16   57  234
##  [51,]   17   23  456
##  [52,]   17   24  356
##  [53,]   17   25  346
##  [54,]   17   26  345
##  [55,]   17   34  256
##  [56,]   17   35  246
##  [57,]   17   36  245
##  [58,]   17   45  236
##  [59,]   17   46  235
##  [60,]   17   56  234
##  [61,]   23   45  167
##  [62,]   23   46  157
##  [63,]   23   47  156
##  [64,]   23   56  147
##  [65,]   23   57  146
##  [66,]   23   67  145
##  [67,]   24   35  167
##  [68,]   24   36  157
##  [69,]   24   37  156
##  [70,]   24   56  137
##  [71,]   24   57  136
##  [72,]   24   67  135
##  [73,]   25   34  167
##  [74,]   25   36  147
##  [75,]   25   37  146
##  [76,]   25   46  137
##  [77,]   25   47  136
##  [78,]   25   67  134
##  [79,]   26   34  157
##  [80,]   26   35  147
##  [81,]   26   37  145
##  [82,]   26   45  137
##  [83,]   26   47  135
##  [84,]   26   57  134
##  [85,]   27   34  156
##  [86,]   27   35  146
##  [87,]   27   36  145
##  [88,]   27   45  136
##  [89,]   27   46  135
##  [90,]   27   56  134
##  [91,]   34   56  127
##  [92,]   34   57  126
##  [93,]   34   67  125
##  [94,]   35   46  127
##  [95,]   35   47  126
##  [96,]   35   67  124
##  [97,]   36   45  127
##  [98,]   36   47  125
##  [99,]   36   57  124
## [100,]   37   45  126
## [101,]   37   46  125
## [102,]   37   56  124
## [103,]   45   67  123
## [104,]   46   57  123
## [105,]   47   56  123
于 2013-03-07T16:51:34.897 に答える