我在 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")
现在我需要计算每个 ID 的平均价格。所以我可以像这样通过每个不同的 id 来做到这一点:
sum(((df$p[df$id == "1" ])*(df$q[df$id == "1" ])/(sum(df$q[df$id == "1" ]))))
但是如何让它遍历 df$id 的所有可能值并将其打印为矩阵/df,其中还包含总和旁边的 ID?我有大约 6000 个不同的 ID 和大约 180000 个 obs。所以如果也可以快速完成它会很好吗?
以不同的方式分解它,假设这是我的数据:
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
这给了我价格 pr。ID = 1 的所有单位的单位。
更新,使用set.seed(1234)
和这个数据生成:
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
四舍五入可能有点偏。