如何使用dplyr根据组上的聚合函数计算新列?
发布时间:2020-12-14 04:53:42 所属栏目:百科 来源:网络整理
导读:我经常需要计算R数据帧的新列(长格式),其值应取决于组的聚合函数(例如总和).例如,我可能想知道任何一天产品占销售额的比例: daily fraction = revenue for product i on day d / sum or revenue for all products on day d 我目前的策略是总结和加入: libr
我经常需要计算R数据帧的新列(长格式),其值应取决于组的聚合函数(例如总和).例如,我可能想知道任何一天产品占销售额的比例:
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,3,3),product = rep(c("A","B"),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) 这有效,但我不确定它是否是反模式.在多行上重复相同的数据(每日收入)似乎有点低效,使用聚合乱丢我的数据框.我的问题是: >我目前的做法是否正常? 解决方法
除了使用汇总进行聚合外,您还可以使用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)会被回收以填充组中的所有行. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |