попробуйте использовать library(expss)
там вы можете вычислить различную взвешенную статистику w_...
для вашего примера
myMatrix <- matrix(c(1,2,3,4,3,1,2,1), nrow=4, ncol=2)
colnames(myMatrix) <- c("values","frequencies")
myMatrix <- as.data.frame(myMatrix)
with(myMatrix, expss::w_mean(x = values, weight = frequencies))
[1] 2.142857
> 15/7
[1] 2.142857