R 循环浏览事务文件以导出产品的平均价格

R 循环浏览事务文件以导出产品的平均价格,r,loops,vectorization,R,Loops,Vectorization,我正在编写一个数据文件,其中包含来自不同连锁店(如超市)的产品销售情况。 以防有人熟悉。 该文件包含多个字段: id-唯一的客户id 连锁店连锁id 部门-类别的聚合分组,例如水 类别-产品类别,如汽水 company—销售商品的公司的id 品牌-项目所属品牌的id 日期-购买日期 productsize-购买产品的数量,例如16盎司水 productmeasure-购买产品的单位,例如盎司 purchasequantity—购买的单位数量 purchaseamount—购买的美元金额 prod

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

id-唯一的客户id 连锁店连锁id 部门-类别的聚合分组,例如水 类别-产品类别,如汽水 company—销售商品的公司的id 品牌-项目所属品牌的id 日期-购买日期 productsize-购买产品的数量,例如16盎司水 productmeasure-购买产品的单位,例如盎司 purchasequantity—购买的单位数量 purchaseamount—购买的美元金额 productprice—根据采购金额/采购数量得出的产品价格 我想计算每个产品的交易数据集的平均价格。 对于本练习,我假设我可以通过以下字段定义一个独特的产品:类别、品牌、产品大小,以便任何独特的产品都对应于这三个字段的独特组合

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

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

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

# 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)


谢谢你,菲利克斯。然而,我担心我的帖子有点误导。实际上,我想创建一个数据集,每个独特的产品只出现一次。但我仍然可以从avgPrice中得出。是的,你可以!如果执行以下操作:group_byitem%>%slice1%>%ungroup,您应该会得到所需的结果。这基本上是对你提到的三个变量的每一个独特组合的每个项目进行第一次观察。如果不行就告诉我,行了!非常感谢你!谢谢你帮我清理了切片功能。
avgPrice <- transactions %>% group_by(category, brand, productsize) %>% summarise(avgPrice = mean(productprice))
# 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)