首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环一个事务文件,以求出产品的平均价格。

循环一个事务文件,以求出产品的平均价格。
EN

Stack Overflow用户
提问于 2019-05-08 19:12:14
回答 1查看 58关注 0票数 1

我正在编制一个数据文件,其中包含来自不同连锁商店(如超市)的产品销售情况。(取自此数据集,以防有人熟悉)。该文件包含若干字段:

  1. id -唯一的客户id
  2. 连锁连锁id
  3. 部门-类别的汇总分组(如水)
  4. 类别-产品类别(如汽水)
  5. 公司-销售该物品的公司的身份证
  6. 品牌-项目所属品牌的标识
  7. 日期-购买日期
  8. 产品尺寸-产品购买量(例如16盎司水)
  9. 产品测量-产品购买单位(例如盎司)
  10. 购买数量-购买单位数量
  11. 采购金额-购货金额
  12. 产品价格-产品价格(按购置额/购置价计算)

我想要计算每个产品的平均价格。在这个练习中,我假设我可以通过以下字段来定义一个唯一的产品:类别、品牌、产品大小,这样任何唯一的产品都对应于这三个字段的唯一组合。

因此,首先,我标识了数据集中的唯一项,以获得所有产品的列表:

代码语言:javascript
复制
#transactions is the name of the data frame
items <- unique(transactions %>% select(category, brand, productsize))

现在,我可以使用它作为一个查找表,从事务数据集中提取唯一的产品,并为每个产品得出平均价格。

因为我是新手,所以我只设法让它与一个(不太优雅)的for循环一起工作。

代码语言:javascript
复制
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个条目,所述项数据帧具有56658。我没有处理大型数据集的经验,但我确信问题在于代码,而不是代码的大小。

巴斯丁中的示例文件(300行)。

编辑:发现summarise在这方面运行得很好!

代码语言:javascript
复制
avgPrice <- transactions %>% group_by(category, brand, productsize) %>% summarise(avgPrice = mean(productprice))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-08 22:59:31

因为R是矢量化的,这应该比使用for循环快得多!

代码语言:javascript
复制
# 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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56047544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档