代码之家  ›  专栏  ›  技术社区  ›  Student1981

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

  •  0
  • Student1981  · 技术社区  · 7 年前

    在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 回复  |  直到 7 年前
        1
  •  2
  •   r2evans    7 年前

    只是一个猜测:

    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"