如何在dplyr中将一个组的值与其他组的值分开

如何在dplyr中将一个组的值与其他组的值分开,r,R,我有如下数据帧 fund_name Industry quantity month ABC IT 20 201704 ABC IT 20 201704 ABC Industrials 30 201704 ABC Auto 40

我有如下数据帧

fund_name       Industry     quantity      month
 ABC              IT           20          201704
 ABC              IT           20          201704
 ABC              Industrials  30          201704
 ABC              Auto         40          201704
 ABC              Pharma       50          201704
 DEF              IT           20          201704 
 DEF              Auto         35          201704
 DEF              Auto         35          201704
 DEF              Pharma       40          201704
我想计算的是行业构成占数量的百分比。 e、 g.对于基金,ABC IT行业在201704月的贡献率为40/(40+30+20+50)=0.28,即28%

所需的数据帧应该如下所示

fund_name       Industry       quantity                  month
 ABC              IT           40/(40+30+20+50)          201704
 ABC              Industrials  30/(40+30+20+50)          201704
 ABC              Auto         40/(40+30+20+50)          201704
 ABC              Pharma       50/(40+30+20+50)          201704
 DEF              IT           20/(20+70+40)             201704 
 DEF              Auto         70/(20+70+40)             201704
 DEF              Pharma       40/(20+70+40)             201704
我在下面试过了,但它只给出了数量的总和

final_MF %>% 
   group_by(fund_names,Month,Industry) %>% 
   summarise(total_quant = sum(Quantity)) %>% 
   as.data.frame()
如何在dplyr中实现这一点?

以下几种方法之一:

df <- read.table(header=TRUE, text="fund_name       Industry     quantity      month
ABC              IT           20          201704
ABC              Industrials  30          201704
ABC              Auto         40          201704
ABC              Pharma       50          201704
DEF              IT           20          201704 
DEF              Auto         35          201704
DEF              Pharma       40          201704")
df

library(dplyr)
want<-select(
  mutate(
    left_join(df,
            df %>%
                  group_by(fund_name) %>%
                  summarize(quantity_sum=sum(quantity)),
                by="fund_name"),
    quantity=quantity/quantity_sum),
  -quantity_sum)
want
df%
汇总(数量总和=总和(数量)),
by=“基金名称”),
数量=数量/数量(总和),
-数量(总)
希望

遵循R代码让我找到了我想要的东西

industry_composition <- final_reliance_MF %>% 
   group_by(fund_names,Industry,Month) %>% 
   summarise(total_quant = sum(Quantity)) %>% 
   group_by(fund_names,Month) %>% 
   mutate(perc = (total_quant/sum(total_quant))*100) %>% 
   as.data.frame()
行业构成%
分组依据(基金名称、行业、月份)%>%
总结(总数量=总和(数量))%>%
分组人(基金名称,月份)%>%
变异(perc=(总数量/和(总数量))*100)%>%
as.data.frame()

您的意思是“按基金名称、行业和月份分组”?按基金名称、行业和月份分组如果根据您展示的示例按基金名称、行业和月份分组,则仅给出1。我没有遵循分母的逻辑,我不确定你的预期是否正确。也许当我这样做时,
df1%>%groupby(fund\u name)%%>%mutate(newquant=quantity/sum(quantity))
@akrun
df1%>%groupby(fund\u name,industry,month)%%>%mutate(newquant=quantity/sum(quantity))
并没有给出我的意图。