Я вижу каналы в ваших попытках, но вот один из подходов с использованием data.table.
Данные:
df <- structure(list(ZONA = c(1, 1, 1, 1, 1, 1), ID_DOM = c("00010001",
"00010001", "00010001", "00010001", "00010001", "00010002"), FE_DOM = c(15.41667, 15.41667,
15.41667, 15.41667, 15.41667, 15.41667), NO_MORAD = c(2, 2, 2,
2, 2, 4)), class = "data.frame", row.names = c(NA, -6L))
Код:
library(data.table)
dt <- as.data.table(df)
dt[,unique(.SD)[,.(WeightedSum = sum(FE_DOM * NO_MORAD))],by="ZONA"]
Выход:
ZONA WeightedSum
1: 1 92.50002