假设我有两个带有来自公式的值的向量:
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)))
这最终会在第一个结束后合并向量。我尝试了不同的组合,但没有一个对我有用。
有人有一个漂亮的伎俩吗?
答案 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