R:交换数组中的每隔一行

时间:2013-10-28 07:27:42

标签: r rows swap

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

举个例子:

  

101 102 147 148

会变成

  

102 101 148 147

非常感谢任何帮助。

由于

麦克

3 个答案:

答案 0 :(得分:4)

假设你的矢量(“数组”是sooo Fortran)是x

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

您可以使代码更简洁,但这可能会让您更容易看到正在发生的事情。

答案 1 :(得分:1)

这是一个功能版本,它将向量维度化为矩阵,然后将每对交换并连接结果......

#  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

答案 2 :(得分:0)

我猜它非常简单,用于循环

  

for(i = 0; i&lt; arr.length; i + = 2){swap(arr [i],arr [i + 1])}