排列所有组合的行顺序,同时保留其他组合

Posted

技术标签:

【中文标题】排列所有组合的行顺序,同时保留其他组合【英文标题】:permute the order of rows all combinations while keeping the other 【发布时间】:2021-01-29 07:14:22 【问题描述】:

我有一个看起来像这样的数据框:

sample<- c("s1", "s2", "s3", "s4")
 spines<- c(1,0,0,1)
 df<- data.frame(sample, spines)
 df
  sample spines
1     s1      1
2     s2      0
3     s3      0
4     s4      1

我想创建一个具有所有可能的行顺序组合的新数据框,但我希望每个样本保留变量脊椎的原始值。 我希望它看起来像这样:

 new_df
   sample spines
1      s1      1
2      s2      0
3      s3      0
4      s4      1
5      s1      1
6      s2      0
7      s4      1
8      s3      0
9      s1      1
10     s3      0
11     s4      1
12     s2      0
13     s1      1
14     s3      0
15     s2      0
16     s4      1
17     s1      1
18     s4      1
19     s2      0
20     s3      0
21     s1      1
22     s4      1
23     s3      0
24     s2      0
25     s2      0
26     s1      1
27     s3      0
28     s4      1
29     s2      0
30     s1      1
31     s4      1
32     s3      0

我找不到办法。 有什么想法和建议吗?

多尔

【问题讨论】:

你能解释一下为什么在你写的时候只有0s和1s:我希望每个样本都保留变量spine的原始值 ? 为什么变量spine只有0和1?你能详细说明一下吗? 【参考方案1】:

如前所述(假设您刚刚在spine 列中填充了随机数,以便在您的预期输出中进行说明),一种解决方案是:

df[c(t(gtools::permutations(4, 4))),]
#>      sample spines
#> 1        s1      1
#> 2        s2      2
#> 3        s3      3
#> 4        s4      4
#> 1.1      s1      1
#> 2.1      s2      2
#> 4.1      s4      4
#> 3.1      s3      3
#> 1.2      s1      1
#> 3.2      s3      3
#> 2.2      s2      2
#> 4.2      s4      4
#> 1.3      s1      1
#> 3.3      s3      3
#> 4.3      s4      4
#> 2.3      s2      2
#> 1.4      s1      1
#> 4.4      s4      4
#> 2.4      s2      2
#> 3.4      s3      3
#> 1.5      s1      1
#> 4.5      s4      4
#> 3.5      s3      3
#> 2.5      s2      2
#> 2.6      s2      2
#> 1.6      s1      1
#> 3.6      s3      3
#> 4.6      s4      4
#> 2.7      s2      2
#> 1.7      s1      1
#> 4.7      s4      4
#> 3.7      s3      3
#> 2.8      s2      2
#> 3.8      s3      3
#> 1.8      s1      1
#> 4.8      s4      4
#> 2.9      s2      2
#> 3.9      s3      3
#> 4.9      s4      4
#> 1.9      s1      1
#> 2.10     s2      2
#> 4.10     s4      4
#> 1.10     s1      1
#> 3.10     s3      3
#> 2.11     s2      2
#> 4.11     s4      4
#> 3.11     s3      3
#> 1.11     s1      1
#> 3.12     s3      3
#> 1.12     s1      1
#> 2.12     s2      2
#> 4.12     s4      4
#> 3.13     s3      3
#> 1.13     s1      1
#> 4.13     s4      4
#> 2.13     s2      2
#> 3.14     s3      3
#> 2.14     s2      2
#> 1.14     s1      1
#> 4.14     s4      4
#> 3.15     s3      3
#> 2.15     s2      2
#> 4.15     s4      4
#> 1.15     s1      1
#> 3.16     s3      3
#> 4.16     s4      4
#> 1.16     s1      1
#> 2.16     s2      2
#> 3.17     s3      3
#> 4.17     s4      4
#> 2.17     s2      2
#> 1.17     s1      1
#> 4.18     s4      4
#> 1.18     s1      1
#> 2.18     s2      2
#> 3.18     s3      3
#> 4.19     s4      4
#> 1.19     s1      1
#> 3.19     s3      3
#> 2.19     s2      2
#> 4.20     s4      4
#> 2.20     s2      2
#> 1.20     s1      1
#> 3.20     s3      3
#> 4.21     s4      4
#> 2.21     s2      2
#> 3.21     s3      3
#> 1.21     s1      1
#> 4.22     s4      4
#> 3.22     s3      3
#> 1.22     s1      1
#> 2.22     s2      2
#> 4.23     s4      4
#> 3.23     s3      3
#> 2.23     s2      2
#> 1.23     s1      1

【讨论】:

【参考方案2】:

我想你可以在 perms 的帮助下从包 pracma 中做到这一点

library(pracma)
df[c(t(perms(1:nrow(df)))),]

【讨论】:

【参考方案3】:

我认为这也会根据你的口头目标得到你想要的:

library(gtools)
sample<- c("s1", "s2", "s3", "s4")
p <- permutations(4,4,sample)  # create all the sample permutations
sample <- as.vector(t(p)) # convert sample permutations transpose matrix to a vector
      
p <- permutations(4,4,1:4)  # create all the spine permutations
spines <- as.vector(t(p))  # convert spines permutations transpose matrix to a vector
      
df <- data.frame(sample, spines)  # create the data frame

【讨论】:

以上是关于排列所有组合的行顺序,同时保留其他组合的主要内容,如果未能解决你的问题,请参考以下文章

组合数组并保留顺序 - 但优先考虑一个数组的顺序而不是另一个

在将其组合到R中的一个数据帧时,在不同的数据帧中保留重复的行名[重复]

添加考虑颜色、形状和线型的组合图例,同时保留原始图例

[BZOJ2467] [中山市选2010] 生成树 (排列组合)

bzoj 2467[中山市选2010]生成树(数论--排列组合)

R如何排列数据帧的所有行,以便在列表中返回所有可能的行组合?