R 按分类数据分组的零售价格摘要统计数字
我需要一些帮助来编写一个函数,该函数接受三个分类输入并返回基于这些输入的汇总统计信息向量 该数据集包含有关零售商品的信息,这些信息可以通过零售细分市场、品牌名称、商品类型、零售价格和实际售价来指定 现在我需要编写一个函数,它将接受这些输入,并对其他需要的数据进行平均、计数和计算 我已按如下方式设置了功能(使用虚构数据): 函数大括号内的代码独立工作,但一旦我将一个函数包装在它周围,我就会开始出错,否则它只会返回R 按分类数据分组的零售价格摘要统计数字,r,R,我需要一些帮助来编写一个函数,该函数接受三个分类输入并返回基于这些输入的汇总统计信息向量 该数据集包含有关零售商品的信息,这些信息可以通过零售细分市场、品牌名称、商品类型、零售价格和实际售价来指定 现在我需要编写一个函数,它将接受这些输入,并对其他需要的数据进行平均、计数和计算 我已按如下方式设置了功能(使用虚构数据): 函数大括号内的代码独立工作,但一旦我将一个函数包装在它周围,我就会开始出错,否则它只会返回0counts和NaN作为平均值 任何帮助都将不胜感激。我在R方面的经验很少,因此如果
0
counts和NaN
作为平均值
任何帮助都将不胜感激。我在R方面的经验很少,因此如果这是一个微不足道的问题,我很抱歉,但我无法找到解决方案。您的代码中有很多错误,包括:
函数拼写错误
- 使用单个
(赋值)而不是=
(相等性测试)==
实际值的错误类型
- 在函数中对
、段
和品牌
进行硬编码,而不是引用参数类型
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
安德烈的解决方案已经相当完整了。(
ddply
很酷!不知道这个函数…)
不过,只需添加一项:如果您想计算所有可能组合的汇总值,您可以使用R的板载函数by
:
by(dataold, list(dataold$segment, dataold$brand, dataold$type),
function(x) summary(x[,c('retail', 'actual')])
)
严格来说,这不是您要求的,但可能仍然很有启发性。您可能会发现查看
subset()
函数很有帮助。另请注意,R使用两个“等于”符号,即=
表示相等。您可能还需要确保它在原始脚本中是function()
(而不是“function()”)。你输入的是“actual”而不是“actaul”…我为所有的拼写错误道歉。这只是我为这篇文章写的一个简单的例子。实际代码在我的工作计算机上。这段代码似乎总是返回旧数据集的列平均值,不管我向输入中添加了什么组合。我希望函数只返回由输入创建的子集的平均值。我在代码中遗漏了什么吗?还有,为什么要用哪个?我是新来的功能,似乎做同样的事情。谢谢你的帮助!
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
by(dataold, list(dataold$segment, dataold$brand, dataold$type),
function(x) summary(x[,c('retail', 'actual')])
)