R中不重复的组合
Posted
技术标签:
【中文标题】R中不重复的组合【英文标题】:Combination without repetition in R 【发布时间】:2014-02-15 19:58:58 【问题描述】:我正在尝试获取变量元素长度为 3 的所有可能组合。虽然它部分与 combn() 一起工作,但我并没有完全得到我正在寻找的输出。这是我的例子
x <- c("a","b","c","d","e")
t(combn(c(x,x), 3))
我得到的输出是这样的
[,1] [,2] [,3]
[1,] "a" "b" "c"
[2,] "a" "b" "d"
[3,] "a" "b" "e"
我对这个命令不太满意,原因有两个。我想得到一个显示“a+b+c”“a+b+b”的输出......,不幸的是我无法用 paste() 或其他东西编辑输出。
我也期待每组字母的一种组合,即我要么得到“a+b+c”或“b+a+c”,但不能同时得到。
【问题讨论】:
对于问题的第一部分,请注意combn
采用FUN
参数:t(combn(c(x,x), 3, paste0, collapse = "+"))
我无法从您的描述中看出您想要组合 (combn(x,3)
) 还是排列 (expand.grid(x,x,x)
)。不知道你为什么在你的组合争论中重复 x。
函数letters[1:5]
也对你有用
【参考方案1】:
尝试类似:
x <- c("a","b","c","d","e")
d1 <- combn(x,3) # All combinations
d1
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# [1,] "a" "a" "a" "a" "a" "a" "b" "b" "b" "c"
# [2,] "b" "b" "b" "c" "c" "d" "c" "c" "d" "d"
# [3,] "c" "d" "e" "d" "e" "e" "d" "e" "e" "e"
nrow(unique(t(d1))) == nrow(t(d1))
# [1] TRUE
d2 <- expand.grid(x,x,x) # All permutations
d2
# Var1 Var2 Var3
# 1 a a a
# 2 b a a
# 3 c a a
# 4 d a a
# 5 e a a
# 6 a b a
# 7 b b a
# 8 c b a
# 9 d b a
# ...
nrow(unique(d2)) == nrow(d2)
# [1] TRUE
【讨论】:
这会产生重复,这不是 OP 想要的 不,我只是在回应时没有考虑我认为@rawr 在说什么。抱歉,将删除。 @rawr 哪个给出重复项? (PS我喜欢你的名字) 我想它真的不清楚 OP 在寻找什么。combn(x, 3)
和 combn(c(x,x), 3)
的使用以及为什么 OP 想要“a + b + c”而不是“a + c + b”,而像“a + a + a”这样的东西是可以接受的。
你知道,现在我又读到了他想要的东西,我想他可能真的想要“a+b+c”。我只是以为他想要组合,但他可能想要实际的文字。【参考方案2】:
试试这个
x <- c("a","b","c","d","e")
expand.grid(rep(list(x), 3))
【讨论】:
以上是关于R中不重复的组合的主要内容,如果未能解决你的问题,请参考以下文章