将DF $ col分为三组,在R中尽可能多的组合

  • 本文关键字:尽可能 组合 三组 col DF r split
  • 更新时间 :
  • 英文 :


假设,我有一个df $ col,长度为8:

1
2
3
4
5
6
7
8  

我想将其分为三个不同的部分,并尽可能多地"可能性"。这样:

1  2  345678 
1 23456  78 
1 234567 8
123 45 678  
123456 7 8
so on... 

有人可以在r中提出一个简单的解决方案吗?谢谢

我对情况有所推广:

vec <- letters[1:8]    
n <- 2
combn(length(vec)-1,n,function(x){
  for(i in rev(x)) vec <- append(vec," ",i)
  paste0(vec,collapse="")})
# [1] "a b cdefgh" "a bc defgh" "a bcd efgh" "a bcde fgh" "a bcdef gh" "a bcdefg h" "ab c defgh" "ab cd efgh" "ab cde fgh" "ab cdef gh"
# [11] "ab cdefg h" "abc d efgh" "abc de fgh" "abc def gh" "abc defg h" "abcd e fgh" "abcd ef gh" "abcd efg h" "abcde f gh" "abcde fg h"
# [21] "abcdef g h"

这个想法是您有7个可以切割的地方,因此我们在其中使用Combn进行了样品。它给出了一个不错的矩阵,我们可以通过combnFUN参数即时 apply形成我们的串联。

我最终使用了一个很好的旧循环来概括n个参数,但我们也可以使用递归函数来做到这一点。

我喜欢这个问题。您的问题归结为选择1到10之间的3个整数的所有有序组合。这些组合使您可以在哪里分配原始矢量。

您只需要编写一个函数即可拆分基于位置向量的向量。他们将此功能应用于所有可能的位置向量。

x=1:5
n.group=3
splitAt <- function(x, pos) unname(split(x, cumsum(seq_along(x) %in% pos)))
apply(combn(length(x),n.group),2,function(pos) splitAt(x,pos))

输出是列表

[[1]]
[[1]][[1]]
[1] 1
[[1]][[2]]
[1] 2
[[1]][[3]]
[1] 3 4 5

[[2]]
[[2]][[1]]
[1] 1
[[2]][[2]]
[1] 2 3
[[2]][[3]]
[1] 4 5
...
[[10]]
[[10]][[1]]
[1] 1 2
[[10]][[2]]
[1] 3
[[10]][[3]]
[1] 4
[[10]][[4]]
[1] 5

最新更新