在R中交换向量上的条件列

在R中交换向量上的条件列,r,R,大小为NxK的矩阵称为A,大小为1xK的向量/矩阵称为V V仅由0和1的元素组成,例如: V=matrix(c(0,1,0,0,0,0,1,0,0,1),nrow=1,ncol=10) A=matrix(c(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10),nrow=2,ncol=10) A=matrix(c(2,2,1,1,3,3,4,4,5,5,6,6,7,7,8,8,10,10,9,9),nrow=2,ncol=10) 矩阵A可以如下所示: V=

大小为NxK的矩阵称为A,大小为1xK的向量/矩阵称为V

V仅由0和1的元素组成,例如:

V=matrix(c(0,1,0,0,0,0,1,0,0,1),nrow=1,ncol=10)
A=matrix(c(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10),nrow=2,ncol=10)
A=matrix(c(2,2,1,1,3,3,4,4,5,5,6,6,7,7,8,8,10,10,9,9),nrow=2,ncol=10) 
矩阵A可以如下所示:

V=matrix(c(0,1,0,0,0,0,1,0,0,1),nrow=1,ncol=10)
A=matrix(c(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10),nrow=2,ncol=10)
A=matrix(c(2,2,1,1,3,3,4,4,5,5,6,6,7,7,8,8,10,10,9,9),nrow=2,ncol=10) 
然后,我想交换向量V上的条件中的列。如果V中偶数列号(称为r)上有一个1,我想交换A中相应的列r和A中的列r-1

在上面的例子中,第2列中有一个1,第10列中有一个V,所以我想用第2列替换第1列,用第10列替换第9列,所以矩阵应该如下所示:

V=matrix(c(0,1,0,0,0,0,1,0,0,1),nrow=1,ncol=10)
A=matrix(c(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10),nrow=2,ncol=10)
A=matrix(c(2,2,1,1,3,3,4,4,5,5,6,6,7,7,8,8,10,10,9,9),nrow=2,ncol=10) 

谢谢

我可以通过以下方式重现您想要的结果:

V2 <- V * ((1:ncol(V) - 1) %% 2)            # only preserve 1s at even spots
A[, 1:ncol(V2) - V2 + cbind(V2[, -1, drop=F], 0)]

我们构造一个向量来索引
a
中的列,以便它们按照您的规范重新排序。从
1:ncol(V)
开始,减去
V
,将标记的列移回一列,然后将
V
移动一列,并将其添加回,以将标记列之前的列移动一列。

+1,获得可复制的示例和期望的答案。您好,布罗迪,谢谢您的回答!不幸的是,我认为它也交换了第6列和第7列,但它们不应该交换,因为1出现在V中的奇数列,即第7列。这太好了。按预期工作。非常感谢。