【问题标题】:Dividing values in each cell by the group average in R将每个单元格中的值除以 R 中的组平均值
【发布时间】:2019-06-10 21:08:07
【问题描述】:

我正在尝试使用源自原始图表的值生成一个新列。我想先计算同一家酒店和同一日期的组平均值,然后用这个组平均值来划分原始销售额。

这是我的代码:我尝试使用 group_by 计算组平均值并汇总嵌入到 dplyr 包中,但是它没有生成我的 expected results

hotel = c(rep("Hilton",3), rep("Caesar",3))
date1 = c(rep('2018-01-01',2), '2018-01-02', rep('2018-01-01',3))
dba = c(2,0,1,3,2,1)
sales = c(3,5,7,5,2,3)
df = data.frame(cbind(hotel, date1, dba, sales))

df1 = df %>%
  group_by(date1, hotel) %>%
  dplyr::summarise(avg = mean(sales)) %>%
  acast(., date1~hotel)

任何建议将不胜感激!

【问题讨论】:

    标签: r charts dplyr


    【解决方案1】:

    我们可以使用mutate 来代替总结。按'date1'、'hotel'分组后,将'sales'除以'sales'的mean创建一个新列

    library(tidyverse)
    df %>% 
       group_by(date1, hotel) %>% 
       mutate(SalesDividedByMean = sales/mean(sales))
    

    注意:当存在具有不同 types 的列时,cbinding 会导致 matrixmatrix 只能有一个类型。因此,character 类向量可以将整个数据更改为character。用data.frame 包装,将该更改传播到factor(默认为stringsAsFactors = TRUE 或`字符)

    数据

    df <- data.frame(hotel, date1, dba, sales)
    

    【讨论】:

    • 这太棒了!非常感谢!!
    • 非常感谢!但是有一点混乱:我得到的“平均值(销售额)”是整体平均值,而不是同一日期和酒店内的平均值。有什么我误解了吗?
    • 哦,没关系。我在 dplyr 之后库包 plyr,这使我的 group_by 工作很奇怪。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多