R-通过交易文件循环以得出产品的平均价格



我正在处理一个数据文件,该数据文件包含来自各种商店链的销售,例如。超级市场。(以防有人熟悉,从该数据集中取出(。该文件包含许多字段:

  1. ID-唯一的客户ID
  2. 链 - 商店链ID
  3. Dept-类别的总体分组(例如水(
  4. 类别 - 产品类别(例如苏打水(
  5. 公司 - 出售该商品的公司ID
  6. 品牌 - 物品所属品牌的ID
  7. 日期 - 购买日期
  8. 产品化 - 产品购买的金额(例如16盎司水(
  9. 产品量 - 产品购买的单位(例如盎司(
  10. 购买 - 购买的单位数量
  11. puchaseamount-购买的美元金额
  12. ProductPrice-产品价格(由puchaseamount/publuequantity得出(

我想为每种产品计算整个交易数据集的平均价格。对于此练习,我假设我可以通过以下字段来定义唯一产品:类别,品牌,产品尺寸,以便任何唯一的产品都对应于这3个字段的独特组合。

因此,首先,我确定数据集中的唯一项目以获取所有产品的列表:

#transactions is the name of the data frame
items <- unique(transactions %>% select(category, brand, productsize))

我现在可以将其用作查找表,以从交易数据集中拾取唯一产品并得出每个产品的平均价格。

由于我是新手,所以我只是设法让它与loop 的(不太优雅(

for (i in 1:nrow(items)) {
  temp1 <- filter(transactions, category==items[i,1])
  temp2 <- filter(temp1, brand==items[i,2])
  temp3 <- filter(temp2, productsize==items[i,3])
  items$meanvalue[i]<- mean(temp3$productprice)
}

这有效,但是当然非常慢。交易数据框架具有480612条目, items 数据框架的数据框架为56658。我没有大数据集的经验,但我敢肯定问题是代码,代码,大小不大。

pastebin中的示例文件(300行(。

编辑:发现summarise可以很好地工作!

avgPrice <- transactions %>% group_by(category, brand, productsize) %>% summarise(avgPrice = mean(productprice))

由于r被矢量化,这应该比使用for loop快得多!

# library(tidyverse) # if needed
# get item combinations
itemCombs <- transactions %>% 
  group_by(category, brand, productsize) %>% 
  slice(1) %>% 
  ungroup() %>% 
  mutate(item = 1:n()) %>% 
  select(item, everything())
# append item combinations to original dataset and calculate avg price per item 
avgPrice <- transactions %>% 
  left_join(itemCombs, by = c("category", "brand", "productsize")) %>% 
  select(item, productprice) %>% 
  arrange(item) %>% 
  group_by(item) %>% 
  mutate(nItems = n(),
         sumPrice = sum(productprice)) %>% 
  ungroup() %>% 
  mutate(avgPrice = sumPrice/nItems)

最新更新