在R中交换向量上的条件列
大小为NxK的矩阵称为A,大小为1xK的向量/矩阵称为V V仅由0和1的元素组成,例如:在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=
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列。这太好了。按预期工作。非常感谢。