按分类数据分组的零售价格汇总统计

2 r

我需要一些帮助来编写一个带有三个分类输入的函数,并根据这些输入返回一个摘要统计向量.

该数据集包含零售商品的信息,这些商品可以通过零售商品,商品名称,商品类型以及零售价格和实际销售价格来指定.

现在我需要编写一个函数来获取这些输入并进行平均,计数和计算所需的任何其他内容.

我已按如下方式设置了该功能(使用补偿数据):

dataold = data.frame(segment=c("golf","tenis","football","tenis","golf","golf"),
                   brand=c("x","y","z","y","x","a"),
                   type=c("iron","ball","helmet","shoe","driver","iron"),
                   retail=c(124,.60,80,75,150,108),
                   actual=c(112,.60,72,75,135,100))

retailsum = funtion(segment,brand,type){    
     datanew = dataold[which(dataold$segment='segment' & 
                             dataold$brand='brand' & 
                             dataold$type='type'),c("retail","actaul")]

     summary = c(dim(datanew)[1],colMeans(datanew))
     return(summary)
}
Run Code Online (Sandbox Code Playgroud)

函数括号内部的代码可以单独工作,但是一旦我在它周围包装一个函数,我就会开始得到错误,或者只返回0计数和NaN方法.

任何帮助将不胜感激.我对R的经验很少,所以如果这是一个微不足道的问题我很抱歉,但我找不到解决办法.

And*_*rie 7

您的代码中存在很多错误,包括:

  • 拼写错误 function
  • 使用单一=(赋值)而不是==(相等测试)
  • 错误的 actual
  • 硬编码的segment,brandtype在你的函数,而不是引用的论据.

这是你的功能怎么可能看起来像,即它产生有效的结果:

retailsum <- function(data, segment,brand,type, FUN=colMeans){    
  x = with(data, data[segment==segment && brand==brand && type==type,
                      c("retail","actual")])
  match.fun(FUN)(x)
}

retailsum(dataold, "golf", "x", "iron", colMeans)
  retail   actual 
89.60000 82.43333 
Run Code Online (Sandbox Code Playgroud)

这是一个使用该plyr软件包的(可能更灵活)解决方案.这会计算您的细分,品牌和类型的所有组合的功能:

library(plyr)
ddply(dataold, .(segment, brand, type), colwise(mean))
   segment brand   type retail actual
1 football     z helmet   80.0   72.0
2     golf     a   iron  108.0  100.0
3     golf     x driver  150.0  135.0
4     golf     x   iron  124.0  112.0
5    tenis     y   ball    0.6    0.6
6    tenis     y   shoe   75.0   75.0
Run Code Online (Sandbox Code Playgroud)