Im имея некоторые проблемы строит функцию (или с помощью некоторых применить шикарно) в R. У меня есть набор данных, как это:R Выполнение вычислений общего
df<- data.frame(id <-sample(1:10,100, replace = T),
price <-runif(20)*100,
q = sample(1:100,100, replace = T))
colnames(df)<-c("id","price","quantity")
Теперь мне нужно, чтобы рассчитать среднюю цену для каждого человека Я БЫ. Так что я могу сделать это с помощью каждого отдельного идентификатора, как это:
sum(((df$p[df$id == "1" ])*(df$q[df$id == "1" ])/(sum(df$q[df$id == "1" ]))))
Но как мне сделать это пройти через все возможные значения ФР $ ид и распечатать его в виде матрицы/DF, который также содержит идентификатор наряду с сумма? У меня около 6000 разных идентификаторов и около 180000 об. так что было бы неплохо, если бы это было также возможно сделать это быстро?
разбив его по-другому, пусть это мои данные:
id price quantity
1 10 2
1 20 1
1 50 5
2 5 5
2 3 6
2 10 4
Так вот решение для ID = 1 будет: (10 * 2 + 20*1 +50 * 5)/(2+1+5) = 36.25
Это дает мне цену пр. устройство для всех устройств с ID = 1.
Обновлено, используя set.seed(1234)
и это datageneration:
set.seed(1234)
df<- data.frame(id <-sample(1:10,100, replace = T),
price <-runif(20)*100,
q = sample(1:100,100, replace = T))
colnames(df)<-c("id","price","quantity")
Результаты должны выглядеть следующим образом:
id avg.price.per.unit
1 33,71
2 29,84
3 44,53
4 36,27
5 69,63
6 35,99
7 45,26
8 58,32
9 33,36
10 9,67
Округление может быть поодаль ,
Я добавил «Ломая», так как предыдущее решение от Manetheran принимает очень много времени для запуска. – NoThanks