gpt4 book ai didi

r - 如何使用 dplyr 根据组上的聚合函数计算新列(在汇总统计上添加汇总统计)?

转载 作者:行者123 更新时间:2023-12-04 14:09:28 25 4
gpt4 key购买 nike

我经常需要为 R 数据框(长格式)计算一个新列,其值应取决于组的聚合函数(例如 sum)。例如,我可能想知道产品在任何一天占销售额的比例:

daily fraction = revenue for product i on day d / sum or revenue for all products on day d

我目前的策略是总结和加入:
library(dplyr)

join_summary <- function(data, ...) left_join(data, summarise(data, ...))

data = data.frame(
day = c(1,1,2,2,3,3),
product = rep(c("A", "B"), 3),
revenue = c(2, 4, 8, 7, 9, 2)
)

data2 <- data %>%
group_by(day) %>%
join_summary(daily_revenue = sum(revenue)) %>%
mutate(revenue_fraction = revenue / daily_revenue)

这有效,但我不确定它是否是反模式。在多行上重复相同的数据(每日收入)似乎有点低效,用聚合散乱了我的数据框。我的问题是:
  • 我目前的做法好吗?
  • 有没有更好的方法,最好使用来自 dplyr 的工具还是更广泛的哈德利宇宙?
  • 我真的需要我的自定义函数 join_summary ,或者可以用现有的 dplyr 来完成动词? (不过,我更喜欢留在“管道流”中。)
  • 最佳答案

    除了使用 summarise要聚合,您可以使用 mutate将汇总统计信息分配给整列:

    data %>% 
    group_by(day) %>%
    mutate(
    daily_revenue = sum(revenue),
    revenue_fraction = revenue / daily_revenue
    )

    这使
    Source: local data frame [6 x 5]
    Groups: day [3]

    day product revenue daily_revenue revenue_fraction
    <dbl> <fctr> <dbl> <dbl> <dbl>
    1 1 A 2 6 0.3333333
    2 1 B 4 6 0.6666667
    3 2 A 8 15 0.5333333
    4 2 B 7 15 0.4666667
    5 3 A 9 11 0.8181818
    6 3 B 2 11 0.1818182

    这是有效的,因为值 sum(revenue)循环填充组中的所有行。

    关于r - 如何使用 dplyr 根据组上的聚合函数计算新列(在汇总统计上添加汇总统计)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42213465/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com