Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 按分类数据分组的零售价格摘要统计数字_R - Fatal编程技术网

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')])
)