Если ваш набор данных объемный, data.table
- хороший вариант. Вы можете использовать условную замену благодаря оператору :=
(обновление по ссылке)
library(data.table)
setDT(df)
df[id==114051 & (datem %in% c(1888*12+3, 1888*12+4))], price := 10.0]
Эквивалентное решение dplyr
будет выглядеть следующим образом:
library(dplyr)
df %>% mutate(price = if_else(id==114051 & (datem %in% c(1888*12+3, 1888*12+4)), 10, price)
Возможно, оно будет медленнее чем первое решение