在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作为输出的函数。非常感谢你的帮助。
答案 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"
无论您是否有一个确定的一对一映射。