2013-07-14 2 views
1

У меня есть два разных вектора в R. Записи в первом имеют только 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, чтобы вычислить, так что не удается сделать это вручную. Любые идеи были бы замечательными, спасибо!

Jonny

+1

Я думаю, что нет никакой необходимости для умножения, так как v1 является двоичным. 'v1 [v1! = 0] <- v2'. Или лучше, как @AnandaMahto прокомментировал 'v1 [v1 == 1] <- v2' – Arun

+0

Это отлично работает, спасибо! –

+0

Но 'Recycling' работает, если длина второго вектора НЕ равна числу 1. – agstudy

ответ

0

Как предположил, что вы можете сделать:

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

но имеет тот недостаток, перезапись v1. Если вы не хотите, что вы можете сделать:

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

Или это один, который является немного более неясным:

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