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中不重复的组合的主要内容,如果未能解决你的问题,请参考以下文章

如何删除在 R 中不完全重复的行

在Python中不重复输出的排列[重复]

在 R 中生成不重复的组合对

在R中组合两个具有不同行数的数据框[重复]

从 n 个元素生成长度为 r 的组合而不重复或排列的函数的时间复杂度是多少?

在r中创建一个带有条件的组合列表[重复]