从R软件中的一个排列中检索向量

时间:2017-11-11 05:03:06

标签: r vector combinations permutation

在R软件中,假设您有一个长度为n的向量N1。

n <- 10
N1 <- letters[rbinom(n, size = 20, prob = 0.5)]
names(N1) <- seq(n)

假设您有另一个向量N2,它是N1

元素的排列
N2 <- sample(N1, size = n, replace = FALSE)

我想知道你是否可以帮我在R软件中找到一个接收N2作为输入并获得N1作为输出的函数。非常感谢你的帮助。

1 个答案:

答案 0 :(得分:2)

只是一个猜测:

set.seed(2)
n <- 10
N1 <- letters[rbinom(n, size = 20, prob = 0.5)]
names(N1) <- seq(n)
N1
#   1   2   3   4   5   6   7   8   9  10 
# "h" "k" "j" "h" "n" "n" "g" "l" "j" "j" 

重复使得很难找到返回函数,因为没有1对1的映射。但是,如果......

ind <- sample(n)
ind
#  [1]  6  3  7  2  9  5  4  1 10  8
N2 <- N1[ind]
N2
#   6   3   7   2   9   5   4   1  10   8 
# "n" "j" "g" "k" "j" "n" "h" "h" "j" "l" 

除了......之外,我们的效果和以前一样。

N2[order(ind)]
#   1   2   3   4   5   6   7   8   9  10 
# "h" "k" "j" "h" "n" "n" "g" "l" "j" "j" 
all(N1 == N2[order(ind)])
# [1] TRUE

这允许您从N2上的某个函数获取反向映射:

toupper(N2)[order(ind)]
#   1   2   3   4   5   6   7   8   9  10 
# "H" "K" "J" "H" "N" "N" "G" "L" "J" "J" 

无论您是否有一个确定的一对一映射。