我有一個列表可能的組合如下:ř創建的變量
mylist <- list(A=seq_len(3)-1, A=seq_len(3)-1, B=seq_len(2)-1, B=seq_len(2)-1)
mylist
$A
[1] 0 1 2
$A
[1] 0 1 2
$B
[1] 0 1
$B
[1] 0 1
也就是說的A
兩個實例可以具有的狀態0,1,2和B
兩個實例可以具有的狀態0,1 。
我想產生具有所有實例,用於哪些狀態的總和的所有組合的產品的字符串(作爲一個例子)1.
我通過首先獲得所有潛在組合,兩者A
這樣做' S和B's
和服用所述子集的量,總和爲1
all.combns <- expand.grid(mylist)
ac <- all.combns[which(rowSums(all.combns)==1),]
unname(apply(ac, 1, function(x)paste(colnames(ac), x, sep="_", collapse=" * ")))
結果是:
"A_1 * A_0 * B_0 * B_0"
"A_0 * A_1 * B_0 * B_0"
"A_0 * A_0 * B_1 * B_0"
"A_0 * A_0 * B_0 * B_1"
第一和塞康d字符串和第三和第四個字符串是相同的。 我期望的結果將是:
"2 * A_1 * A_0 * B_0 * B_0"
"2 * A_0 * A_0 * B_1 * B_0"
有一種優雅的方式來做到這一點?我考慮過在all.combns
例如A
和B
的行中添加行。然後用here所述的方法對獨特元素進行計數。不過,我認爲必須有一個更簡單的解決方案,而不必與expand.grid
形成所有組合。
@ user1987175 - 在問候你的審查,這個答案在這裏(http://stackoverflow.com/review/low-quality-posts/3871248#./3871248?&_suid=139040787868004590174438491092)顯然不是一個回答;請在審覈時更加小心。 – LittleBobbyTables