2013-07-14 82 views
1

我在R中有2个不同的向量。第一个入口只有0或1.第二个向量的长度等于第一个向量中1的个数。我想要一个输出是第一个向量,但1的替换为第三个向量的输入。例如。不同长度的R中的乘法向量

v1<-c(1,0,0,1,1) 
v2<-c(2,3,4) 

我想:

v3<-c(2,0,0,3,4) 

V1的长度将是10在我的剧本,我有超过1000计算,因此不可能做手工。任何想法都会很棒,谢谢!

强尼

+1

我觉得没有必要为乘法,因为V1是二进制。 'v1 [v1!= 0] < - v2'。或者更好@AnandaMahto评论说'v1 [v1 == 1] < - v2' – Arun

+0

这很好,谢谢! –

+0

但是,如果第二个向量的长度不等于1的数目,则“回收”工作。 – agstudy

回答

0

建议的一样,你可以这样做:

v1[as.logical(v1)] <- v2 

但它具有覆盖v1的缺点。如果你不希望出现这种情况,你可以这样做:

v3 <- replace(v1, as.logical(v1), v2) 

或者这一个,这更是一个有点晦涩难懂:

v3 <- `[<-`(v1, as.logical(v1), v2)