【问题标题】:R: Swapping every second row in an arrayR:交换数组中的每一行
【发布时间】:2013-10-28 07:27:41
【问题描述】:

我希望在数组中的每一行中交换第二个。我事先不知道数组的长度。但是,我确实知道它可以被 2 整除。

举个例子:

101 102 147 148

会变成

102 101 148 147

任何帮助将不胜感激。

谢谢

迈克

【问题讨论】:

    标签: r rows swap


    【解决方案1】:

    假设您的向量(“数组”是 Fortran)是 x

    even <- seq(from=2, to=length(x), by=2)
    odd <- even - 1
    xnew <- x
    xnew[even] <- x[odd]
    xnew[odd] <- x[even]
    

    您可以使代码更简洁,但这可能更容易看到发生了什么。

    【讨论】:

    • 好的,太好了!哈哈,我的“矢量”调整得很完美!!感谢您的帮助,非常感谢!迈克
    【解决方案2】:

    这是一个函数版本,它将向量维数为矩阵,然后交换每一对循环并连接结果...

    #  Your data
    x <- c( 101 , 102 , 147 , 148 )
    
    #  Simple function
    swap <- function(x){
      c( apply( t( matrix( x , length( x ) /2  , byrow = TRUE ) ) , 2 , rev ) )
    }
    
    swap( x )
    # [1] 102 101 148 147
    
    swap( 1:10 )
    # [1]  2  1  4  3  6  5  8  7 10  9
    

    这是第二个更快的解决方案,它消除了apply 的使用并使用完全矢量化的操作...

    swap2 <- function(x){
      id <- seq_along( x ) %% 2 == 0
      c( t( matrix( c(x[id],x[!id]) , sum(id) ) ) )
    }
    
    swap2(1:10)
    # [1]  2  1  4  3  6  5  8  7 10  9
    

    【讨论】:

      【解决方案3】:

      我猜使用 for 循环很简单

      for(i=0 ;i

      【讨论】:

      • 对不起,我没有注意到问题中的 R
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-12
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      相关资源
      最近更新 更多