我有两个长度相等的向量,我想根据第二个条件将第一个值减半.作为一个具体的例子,让我们
V1 = 1:6 ; V2 = c(0,0,1,1,0,1)
Run Code Online (Sandbox Code Playgroud)
我想将V1中的每个值除以2,这对应于V2中的1.
我知道如何使用for循环执行此操作,但每个向量有几十万个元素,所以看起来应该有一个更快的方法.
我真正想要的是像apply函数,但只适用于选择元素.
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)
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |