如何返回奇数位置的元素?

时间:2015-10-21 11:01:03

标签: r

说我们有:

vector <- c(3:10)

我想在奇数位置的向量中找到元素,将所有元素放在偶数位置到v的末尾,顺序颠倒。

所以它看起来像

结果

3 5 7 9

RESULT2

3 5 7 9 10 8 6 4

但我需要一个简短的函数,不能使用循环

4 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情

vector <- 3:10
n <- length(vector)
c(vector[seq(n) %% 2 == 1], rev(vector[seq(n) %% 2 == 0]))
## [1]  3  5  7  9 10  8  6  4

答案 1 :(得分:2)

快一点:

n <- length(vector)/2
result <- vector[c(2*(1:n)-1,2*(n:1))]

速度比较:

vector <- 3:10

system.time(
  for ( i in 1:100000 )
  {
    n <- length(vector)/2
    result_A <- vector[c(2*(1:n)-1,2*(n:1))]
  }
)

system.time(
  for ( i in 1:100000 )
  {
    n <- length(vector)
    result_B <- c(vector[seq(n) %% 2 == 1], rev(vector[seq(n) %% 2 == 0]))
  }
)

system.time(
  for ( i in 1:100000 )
  {
    result_C <- c(vector[c(TRUE, FALSE)], rev(vector[c(FALSE, TRUE)]))
  }
)

> vector <- 3:10

> system.time(
+   for ( i in 1:100000 )
+   {
+     n <- length(vector)/2
+     result_A <- vector[c(2*(1:n)-1,2*(n:1))]
+   }
+ )
   user  system elapsed 
   0.64    0.00    0.65 

> system.time(
+   for ( i in 1:100000 )
+   {
+     n <- length(vector)
+     result_B <- c(vector[seq(n) %% 2 == 1], rev(vector[seq(n) %% 2 == 0]))
 .... [TRUNCATED] 
   user  system elapsed 
  10.78    0.00   10.86 

> system.time(
+   for ( i in 1:100000 )
+   {
+     result_C <- c(vector[c(TRUE, FALSE)], rev(vector[c(FALSE, TRUE)]))
+   }
+ )
   user  system elapsed 
   2.81    0.00    2.83 

> result_A
[1]  3  5  7  9 10  8  6  4
> result_B
[1]  3  5  7  9 10  8  6  4
> result_C
[1]  3  5  7  9 10  8  6  4
> 

答案 2 :(得分:1)

我认为你最直接的方法是

vector <- 3:10

result <- vector[c(TRUE, FALSE)]
result2 <- c(vector[c(TRUE, FALSE)], rev(vector[c(FALSE, TRUE)]))

答案 3 :(得分:0)

c(seq(min(vector), max(vector), by=2), rev(vector[!vector %in% a]))

# [1]  3  5  7  9 10  8  6  4