少し異なるタック。すべての値ではなく、変更する必要のある値を更新し、を使用してそれらから選択するだけifelse()
です。例えば
value<-c(2, 4, 5, 8, 2, 3, 1)
tf<-c(TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE)
df<-data.frame(value, tf)
df <- transform(df, newVals = value) ## task a copy of `value`
df[df$tf, "newVals"] <- df[df$tf, "value"] / 2 ## update only ones we want
df
与える
> df
value tf newVals
1 2 TRUE 1.0
2 4 FALSE 4.0
3 5 FALSE 5.0
4 8 FALSE 8.0
5 2 TRUE 1.0
6 3 FALSE 3.0
7 1 TRUE 0.5
すべてのインデックスが気に入らない場合は、これを少し分解することができますind
。行のインデックスを含むを作成するだけtf
ですTRUE
。
df <- transform(df, newVals = value)
ind <- with(df, which(tf))
df[ind, "newVals"] <- df[ind, "value"] / 2
df
> df
value tf newVals
1 2 TRUE 1.0
2 4 FALSE 4.0
3 5 FALSE 5.0
4 8 FALSE 8.0
5 2 TRUE 1.0
6 3 FALSE 3.0
7 1 TRUE 0.5