首页 文章

从 R-software 中的一个排列中检索向量

提问于
浏览
0

在 R-software 中,假设您有一个长度为 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-software 中找到一个函数,该函数接收 N2 作为输入并获取 N1 作为输出。非常感谢你的帮助。

1 回答

  • 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-to-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"
    

    不管您是否有确定的 1-to-1 映射。

相关问题