快速划分特定值R.

sea*_*son 3 r

我有两个长度相等的向量,我想根据第二个条件将第一个值减半.作为一个具体的例子,让我们

V1 = 1:6 ; V2 = c(0,0,1,1,0,1)
Run Code Online (Sandbox Code Playgroud)

我想将V1中的每个值除以2,这对应于V2中的1.

我知道如何使用for循环执行此操作,但每个向量有几十万个元素,所以看起来应该有一个更快的方法.

我真正想要的是像apply函数,但只适用于选择元素.

nsh*_*eff 5

v1 = c(1:6)
v2 = c(0,0,1,1,0,1)
v1 / (v2+1)
Run Code Online (Sandbox Code Playgroud)

更一般地说,如果你想要一个apply函数,请查看 ?mapply

mapply(function(x1, x2) { if (x2==1) { x1/2; } else { x1 } } , v1, v2)
Run Code Online (Sandbox Code Playgroud)

这是使用data.table的方法,这可能很快......

library(data.table)
DT[v2==1,divisor:=2]
DT[v2==0,divisor:=1]
DT[,answer:=v1/divisor]
Run Code Online (Sandbox Code Playgroud)