R语言使用group_by()与prod()计算分组内指定类型行的乘积
解决方案
场景1:id可唯一标识A/B/C/total分组
直接修改原有代码中prod()的计算范围,仅筛选type为A、B的数值参与计算即可:
library(dplyr) df_result <- df %>% group_by(id) %>% mutate( value_num = as.numeric(value), value = if_else( type == "total", as.character(prod(value_num[type %in% c("A", "B")], na.rm = TRUE)), value ) ) %>% ungroup() %>% select(-value_num)
场景2:id无法唯一标识分组(同id下有多组A/B/C/total组合)
首先给每组完整的A/B/C/total组合生成专属分组标识,再按id+专属分组标识分组计算即可:
library(dplyr) df2_result <- df2 %>% # 生成组标识:每遇到一个A就新增一组,适配每组以A开头的结构 mutate(group_id = cumsum(type == "A")) %>% # 按id+自定义组标识分组 group_by(id, group_id) %>% mutate( value_num = as.numeric(value), value = if_else( type == "total", as.character(prod(value_num[type %in% c("A", "B")], na.rm = TRUE)), value ) ) %>% ungroup() %>% select(-group_id, -value_num)
内容的提问来源于stack exchange,提问作者MLE
相关产品推荐
相关产品推荐

