R 如何自定义排列,使任何组维度都不包含相同的索引两次?
我有以下TIBLE,其中包含一些索引的所有排列:R 如何自定义排列,使任何组维度都不包含相同的索引两次?,r,algorithm,tidyverse,R,Algorithm,Tidyverse,我有以下TIBLE,其中包含一些索引的所有排列: bb <- as_tibble(expand.grid(v1=0:2, v2=0:2)) %>% arrange(v1, v2) bb # A tibble: 9 x 2 v1 v2 <int> <int> 1 0 0 2 0 1 3 0 2 4 1 0 5 1 1 6 1 2 7 2
bb <- as_tibble(expand.grid(v1=0:2, v2=0:2)) %>%
arrange(v1, v2)
bb
# A tibble: 9 x 2
v1 v2
<int> <int>
1 0 0
2 0 1
3 0 2
4 1 0
5 1 1
6 1 2
7 2 0
8 2 1
9 2 2
如何将其安排为生成此输出:
v1 v2
<int> <int>
1 0 0
2 1 1
3 2 2
4 0 1
5 1 2
6 2 0
7 0 2
8 1 0
9 2 1
其中,输出为三组/组,这样在每个组中,每个变量中的索引不会重复。请注意,满足此条件的每个组/集只能有这么多行…很抱歉,我对tibble不太熟悉,因此我提供了一个以R为基础的data.frame解决方案: 资料 更新:下面给出了一个适用于具有所需格式的所有组合的更高效的生成器:
genAllCombn <- function(n) {
v1 <- rep(0:(n-1),n)
v2 <- (v1 + rep(0:(n-1),1,each = n)) %% n
return(data.frame(v1,v2))
}
> genAllCombn(4)
v1 v2
1 0 0
2 1 1
3 2 2
4 3 3
5 0 1
6 1 2
7 2 3
8 3 0
9 0 2
10 1 3
11 2 0
12 3 1
13 0 3
14 1 0
15 2 1
16 3 2
你如何决定分组/集合?它总是固定的3行还是基于行数的一些公式?@RonakShah 0:N-1谢谢!感谢您花时间准备此答案,但结果不正确。每组不得重复索引,例如,在您的答案的第一组中,v2为0,0,0,0,因此它重复0。@天行者很抱歉我的函数移位器出错。我更新了我的解决方案和结果,所以它现在似乎是正确的,请检查它与转移酷的想法,我希望它可以更简单地使用tidyverse。。。我会考虑的。@SkyWalker我写了一个生成器,用于根据您的需要构造输出,请参阅我的更新,我认为这是非常有效的。
> res
v1 v2
1 0 0
2 1 1
3 2 2
4 0 1
5 1 2
6 2 0
7 0 2
8 1 0
9 2 1
df <- structure(list(v1 = c(0L, 0L, 0L, 1L, 1L, 1L, 2L, 2L, 2L), v2 = c(0L,
1L, 2L, 0L, 1L, 2L, 0L, 1L, 2L)), class = "data.frame", row.names = c(NA,
-9L))
genAllCombn <- function(n) {
v1 <- rep(0:(n-1),n)
v2 <- (v1 + rep(0:(n-1),1,each = n)) %% n
return(data.frame(v1,v2))
}
> genAllCombn(4)
v1 v2
1 0 0
2 1 1
3 2 2
4 3 3
5 0 1
6 1 2
7 2 3
8 3 0
9 0 2
10 1 3
11 2 0
12 3 1
13 0 3
14 1 0
15 2 1
16 3 2