如何将功能应用于四分位数子集?

时间:2019-05-08 20:08:58

标签: r

我有一个数据集,该数据集跟踪某些客户特征的销售额(logmove),并试图找到某个特征(收入)的四分位数范围。我已经创建了收入的四分位数范围,但是我需要找到每个四分位数的平均销售额,我无法弄清楚。

到目前为止的

代码

oj = read.csv("oj.csv")
dom = (subset(oj, brand == "dominicks"))
summary(dom$INCOME)

applyQuant = function(x){
  cut(x, breaks = c(quantile(dom$INCOME, probs = seq(0,1, by = 0.25))), 
      labels = c("Q1", "Q2", "Q3", "Q4"), include.lowest = TRUE)
}
dom.quant = sapply(dom$INCOME, applyQuant)

基本上,我需要根据四分位数建立四组收入(x变量),然后找到每个分位数范围的平均销售额(y值)。

1 个答案:

答案 0 :(得分:2)

只需将分位数结果分配为新列。然后运行aveaggregate以获得平均销售额。

dom$quant <- sapply(dom$INCOME, applyQuant)

实际上,cut不需要像sapply这样的循环,因此可以直接分配列:

dom$quant <- cut(dom$INCOME, 
                 breaks = c(quantile(dom$INCOME, probs = seq(0,1, by = 0.25))), 
                 labels = c("Q1", "Q2", "Q3", "Q4"), include.lowest = TRUE)

# NEW COLUMN AGGREGATION
dom$quant_sales_mean <- with(dom, ave(SALES, quant, FUN=mean))
dom

# NEW DATA FRAME AGGREGATION
agg_df <- aggregate(SALES ~ quant, dom, mean)
agg_df