略有不同的策略;只需更新需要更改的值而不是所有值,然后使用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