Используйте prod()
для умножения всех значений в своих аргументах.
library(dplyr)
df %>%
group_by(id, weight) %>%
summarise(prod = prod(value))
# # A tibble: 2 x 3
# # Groups: id [2]
# id weight prod
# <int> <int> <dbl>
# 1 231 50 0.258
# 2 420 30 0.103
Или базовый способ
aggregate(value ~ id + weight, df, prod)