如何用 R 计算组标签的排列?
How to calculate permutations of group labels with R?
给定一个向量,如:
labels <- c(1,2,3,3,3)
如何获得所有可能的组重新标记?对于这个例子:
1,2,3,3,3
1,3,2,2,2
2,1,3,3,3
2,3,1,1,1
3,1,2,2,2
3,2,1,1,1
我一直在查看 permute
包,但我不知道如何将它应用到这个案例中。
这个解决方案怎么样
labels <- c(1,2,3,3,3)
library(data.table)
a <- do.call(cbind, combinat::permn(unique(labels)))
data.table(a)[,lapply(.SD, function(x)x[labels]),]
# V1 V2 V3 V4 V5 V6
#1: 1 1 3 3 2 2
#2: 2 3 1 2 3 1
#3: 3 2 2 1 1 3
#4: 3 2 2 1 1 3
#5: 3 2 2 1 1 3
或者,只是
apply(a, 2, function(x) x[labels])
# [,1] [,2] [,3] [,4] [,5] [,6]
#[1,] 1 1 3 3 2 2
#[2,] 2 3 1 2 3 1
#[3,] 3 2 2 1 1 3
#[4,] 3 2 2 1 1 3
#[5,] 3 2 2 1 1 3
我post这里是我自己建议的解决方案:
library(combinat)
labels <- c(1,2,3,3,3)
group.perms <- permn(unique(labels))
for(i in 1:length(group.perms)){
cat(match(labels, group.perms[[i]]), "\n")
}
#2 1 3 3 3
#3 1 2 2 2
#3 2 1 1 1
#2 3 1 1 1
#1 3 2 2 2
#1 2 3 3 3
(但我更喜欢@Khashaa 提出的第二种解决方案)
给定一个向量,如:
labels <- c(1,2,3,3,3)
如何获得所有可能的组重新标记?对于这个例子:
1,2,3,3,3
1,3,2,2,2
2,1,3,3,3
2,3,1,1,1
3,1,2,2,2
3,2,1,1,1
我一直在查看 permute
包,但我不知道如何将它应用到这个案例中。
这个解决方案怎么样
labels <- c(1,2,3,3,3)
library(data.table)
a <- do.call(cbind, combinat::permn(unique(labels)))
data.table(a)[,lapply(.SD, function(x)x[labels]),]
# V1 V2 V3 V4 V5 V6
#1: 1 1 3 3 2 2
#2: 2 3 1 2 3 1
#3: 3 2 2 1 1 3
#4: 3 2 2 1 1 3
#5: 3 2 2 1 1 3
或者,只是
apply(a, 2, function(x) x[labels])
# [,1] [,2] [,3] [,4] [,5] [,6]
#[1,] 1 1 3 3 2 2
#[2,] 2 3 1 2 3 1
#[3,] 3 2 2 1 1 3
#[4,] 3 2 2 1 1 3
#[5,] 3 2 2 1 1 3
我post这里是我自己建议的解决方案:
library(combinat)
labels <- c(1,2,3,3,3)
group.perms <- permn(unique(labels))
for(i in 1:length(group.perms)){
cat(match(labels, group.perms[[i]]), "\n")
}
#2 1 3 3 3
#3 1 2 2 2
#3 2 1 1 1
#2 3 1 1 1
#1 3 2 2 2
#1 2 3 3 3
(但我更喜欢@Khashaa 提出的第二种解决方案)