微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

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

 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

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

Dor

解决方法

上述解决问题的一种解决方案(假设您只是在预期输出中为说明目的而用随机数填充了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
,

我想您可以在软件包perms的{​​{1}}的帮助下完成此任务

pracma
,

我认为这也会根据您的语言目标为您提供想要的东西:

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,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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。