R每两个/四个值后交替两个/四个向量

时间:2015-04-16 12:51:20

标签: r

假设我有两个带有来自公式的值的向量:

A <- c(0.11, -0.11, -.20, .20, -0.18, 0.18)
B <- c(-0.11, 0.11, .20, -.20, 0.18, -0.18)

我希望实现的是将顶点合并到一个向量中,其中我有前两个A值,然后是B的第3个和第4个值,然后是A的第5个和第6个值(在实际数据集中顶点长度为96个字符),最终得到:

V <- c(0.11, -0.11, .20, -.20, -0.18, 0.18)

我希望用四个向量完成相同的操作,它每4个值在向量之间切换。看到向量很长,我不想使用索引。

我在使用c()rbind()函数的组合时遇到了很多错误,但总是错误地合并。

我尝试过的代码示例(使用可能值替换调用对象):

c(rbind(1.2 - (1.2 + 1.2/2),
        1.2 - 1.2/2)),
  rbind(1.2 - 1.2/2), 
        1.2 - (1.2 + 1.2/2)))

这最终会在第一个结束后合并向量。我尝试了不同的组合,但没有一个对我有用。

有人有一个漂亮的伎俩吗?

2 个答案:

答案 0 :(得分:3)

这是一个包装函数,它将接受任意数量的向量并给出您想要的结果(尽管假设向量具有相同的长度)

Myfunc <- function(...){
  temp <- cbind(...)
  len <- ncol(temp)
  suppressWarnings(temp[cbind(seq(nrow(temp)), rep(seq(len), each = len))]) 
}

Myfunc(A, B)
## [1]  0.11 -0.11  0.20 -0.20 -0.18  0.18

关于4个向量(由评论中的OP提供)

A <- 1:16  ; B <- 21:36 ; C <- 41:56 ; D <- 61:76
Myfunc(A, B, C, D)
## [1]  1  2  3  4 25 26 27 28 49 50 51 52 73 74 75 76

答案 1 :(得分:2)

> (1:6) %% 4 %in% c(1,2)
[1]  TRUE  TRUE FALSE FALSE  TRUE  TRUE

> (1:12) %% 8 %in% c(1,2,3,4)
 [1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE

或您的示例

> D <- rep(0,6)
> D[(1:6) %% 4 %in% c(1,2)] <- A[(1:6) %% 4 %in% c(1,2)]
> D[!(1:6) %% 4 %in% c(1,2)] <- B[!(1:6) %% 4 %in% c(1,2)]
> D
[1]  0.11 -0.11  0.20 -0.20 -0.18  0.18