代码之家  ›  专栏  ›  技术社区  ›  Roman LuÅ¡trik

基于另一个向量替换向量中的值

  •  14
  • Roman LuÅ¡trik  · 技术社区  · 14 年前

    我想替换向量中的值( x )使用另一个向量的值( y )第22条:方法需要是动态的,以适应向量中不同数量的“级别”。 X . 例如,考虑向量 X

    x <- sample(c(1, 2, 3, 4, 5), 100, replace = TRUE)
    > x
      [1] 2 4 1 1 3 1 1 1 1 1 2 2 5 5 4 5 5 3 4 1 2 2 3 3 3 5 1 3 4 5 5 3 2 4 3 1 3
     [38] 1 4 5 4 1 4 5 4 5 2 4 2 5 3 4 3 1 2 1 1 5 1 4 2 2 5 2 2 4 5 2 4 5 2 5 4 1
     [75] 3 3 4 4 1 1 4 4 2 4 5 4 5 5 4 2 5 2 4 5 3 2 1 1 2 2
    

    我想把1s换成100,2s换成200等等。

    这可以用for循环轻松完成,但对于大向量(几十万个值),这是非常低效的。有什么关于如何优化代码的提示吗?

    x <- sample(c(1, 2, 3, 4, 5), 100, replace = TRUE)
    y <- c(100, 200, 300, 400, 500)
    x.lvl <- c(1, 2, 3, 4, 5)
    x.temp <- x
    
    for (i in 1:length(y)) {
        x.temp[which(x == x.lvl[i])] <- y[i]
    }
    
    2 回复  |  直到 6 年前
        1
  •  9
  •   VitoshKa    14 年前

    xf <- as.factor(x)
    y[xf]
    

    levels(xf)

        2
  •  17
  •   Marek    14 年前

    match

    y[match(x, x.lvl)]