2014-01-28 107 views
0

我有幾個向量由三個名字組成。我想要獲得這些向量的所有獨特成對組合。作爲一個例子,具有兩個那些載體,我可以如何在R中創建一個獨特的向量組合?

sham1 <- c('a', 'b') 
sham2 <- c('d', 'e') 
shams <- list(sham1, sham2) 
combinations <- apply(expand.grid(shams, shams),1, unname) 

獲得非唯一的組合,其提供了以下組合

> dput(combinations) 
list(
list(c("a", "b"), c("a", "b")), 
list(c("d", "e"), c("a", "b")), 
list(c("a", "b"), c("d", "e")), 
list(c("d", "e"), c("d", "e")) 
) 

我使用unique(combinations)嘗試,但是這給出了相同的結果。我想獲得是

> dput(combinations) 
list(
list(c("a", "b"), c("a", "b")), 
list(c("d", "e"), c("a", "b")), 
list(c("d", "e"), c("d", "e")) 
) 

因爲已經有組合list(c("d", "e"), c("a", "b")),我不需要組合list(c("a", "b"), c("d", "e")) 我怎麼能得到的只有載體的獨特的組合?

回答

1
s <- seq(length(shams)) 
# get unique pairs of shams indexes, including each index with itself. 
uniq.pairs <- unique(as.data.frame(t(apply(expand.grid(s, s), 1, sort)))) 
# V1 V2 
# 1 1 1 
# 2 1 2 
# 4 2 2 
result <- apply(uniq.pairs, 1, function(x) shams[x]) 
0

不知道你的例子說什麼。如果你想要獨特的成對組合:

strsplit(levels(interaction(sham1, sham2, sep="*")), "\\*") 
+0

我編輯我的問題,使其更清楚。我想要兩兩組合的矢量,而不是我編輯我的問題的元素 –

0

我不明白你想要什麼。而且你似乎改變了你的其他question的期望輸出。
你想你的兩個列表嵌套在另一個列表裏面的列表? 只是一次就不簡單了嗎?喜歡當你有shams

dput(shams) 
list(c("Sham1.r1", "Sham1.r2", "Sham1.r3"), c("Sham2.r1", "Sham2.r2", 
"Sham2.r3")) 

要創建可以使用這樣的嵌套列表:

combinations <- list(shams, "") 
dput(combinations) 
list(list(c("Sham1.r1", "Sham1.r2", "Sham1.r3"), c("Sham2.r1", "Sham2.r2", 
"Sham2.r3"), "") 

雖然這不正是你說的做......

+0

,以使它更清晰 –

1

我也不清楚自己想要什麼不過這個功能可能會有所幫助:

combn 

下面是一個簡單的例子:

> combn(letters[1:4], 2) 
    [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] "a" "a" "a" "b" "b" "c" 
[2,] "b" "c" "d" "c" "d" "d" 

我不認爲這是你想要的,但如果你澄清也許我可以編輯得到你想要的東西:

> sham1<-c('a','b') 
> sham2<-c('d','e') 
> combn(c(sham1,sham2),2) 
    [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] "a" "a" "a" "b" "b" "d" 
[2,] "b" "d" "e" "d" "e" "e" 
1

combn讓你的組合(所以,獨特的),但不是重複的。所以結合那些給你重複的東西,你有它:

c(combn(shams, 2, simplify=FALSE), 
    lapply(shams, function(s) list(s,s))) 
相關問題