我有几个由三个名字组成的向量。我想获得这些载体的所有独特的成对组合。例如,使用其中两个向量,我可以使用
获得非唯一组合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"))
我怎样才能得到唯一的向量组合?
答案 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 :(得分: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])
答案 2 :(得分:1)
combn
为您提供组合(因此,唯一),但不是重复组合。因此,将它与能够重复使用的东西结合起来,你就拥有了它:
c(combn(shams, 2, simplify=FALSE),
lapply(shams, function(s) list(s,s)))
答案 3 :(得分:0)
不知道你的例子在说什么。如果您想要唯一的成对组合:
strsplit(levels(interaction(sham1, sham2, sep="*")), "\\*")
答案 4 :(得分: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"), "")
虽然你说的不完全是......