R 按组对同一列执行管道操作

R 按组对同一列执行管道操作,r,dplyr,R,Dplyr,这是我经常遇到的问题。我的数据集的一部分: L2 L1 unc.max unc.min emi.agg 1 1.A CH4 0.98020864 0.98010294 375913.3 2 1.A CO2 0.06519989 0.06415013 28983572.2 3 1.A N2O 8.10874574 2.38907240 289785.2 4 1.B CH4 0.92234486 0.53458320 2942328.

这是我经常遇到的问题。我的数据集的一部分:

   L2     L1    unc.max    unc.min    emi.agg
1 1.A    CH4 0.98020864 0.98010294   375913.3
2 1.A    CO2 0.06519989 0.06415013 28983572.2
3 1.A    N2O 8.10874574 2.38907240   289785.2
4 1.B    CH4 0.92234486 0.53458320  2942328.1
5 1.B    CO2 0.44141252 0.44093830   580784.1
6 1.A sumGHG 0.15541677 0.09848645 29649270.7
7 1.B sumGHG 0.84306330 0.51914587  3523112.2
我需要由
L2
(因此
1.A
1.B
)定义的每个组在
CH4
CO2
N2O
元素和相应的
sumGHG
元素之间进行一些运算。例如,我想创建一个新列,以便第一行是该行的
unc.max*emi.agg
除以与同一
L2
对应的
sumGHG
行的
unc.max*emi.agg
的乘积。第一行将是:

0.98020864*375913.3/0.15541677*29649270.7

第二个是:

0.06519989*28983572.2/0.15541677*29649270.7

等等。与
sumGHG
对应的行将等于一。我想不出一个可行的办法!数据:

structure(list(L2 = c("1.A", "1.A", "1.A", "1.B", "1.B", "1.A", 
"1.B"), L1 = c("CH4", "CO2", "N2O", "CH4", "CO2", "sumGHG", "sumGHG"
), unc.max = c(0.980208638698309, 0.0651998890654749, 8.1087457367104, 
0.922344859797637, 0.441412519786308, 0.155416769067452, 0.843063296024141
), unc.min = c(0.980102941492096, 0.0641501300870636, 2.38907239683858, 
0.534583203757245, 0.440938301221688, 0.0984864542571333, 0.519145867369634
), emi.agg = c(375913.308161253, 28983572.1535152, 289785.223284676, 
2942328.10140511, 580784.071175234, 29649270.6849611, 3523112.17258035
)), row.names = c(NA, -7L), class = "data.frame")

我认为这样的方法可以做到这一点,使用
groupby

df %>% mutate(newcol = unc.max*emi.agg) %>% 
  group_by(L2) %>% mutate(newcol2 = newcol/newcol[L1=="sumGHG"])
我得到:

# A tibble: 7 x 7
# Groups:   L2 [2]
  L2    L1     unc.max unc.min   emi.agg   newcol newcol2
  <chr> <chr>    <dbl>   <dbl>     <dbl>    <dbl>   <dbl>
1 1.A   CH4     0.980   0.980    375913.  368473.  0.0800
2 1.A   CO2     0.0652  0.0642 28983572. 1889726.  0.410 
3 1.A   N2O     8.11    2.39     289785. 2349795.  0.510 
4 1.B   CH4     0.922   0.535   2942328. 2713841.  0.914 
5 1.B   CO2     0.441   0.441    580784.  256365.  0.0863
6 1.A   sumGHG  0.155   0.0985 29649271. 4607994.  1     
7 1.B   sumGHG  0.843   0.519   3523112. 2970207.  1    
#一个tible:7 x 7
#分组:L2[2]
L2 L1 unc.max unc.min emi.agg newcol newcol2
1.A CH4 0.980 0.980 375913。3684730.0800
2.1.A CO2 0.0652 0.0642 28983572。18897260.410
3.1.A N2O 8.11 2.39 289785。23497950.510
4.1.B CH4 0.922 0.535 2942328。27138410.914
5.1.B二氧化碳0.441 0.441 580784。2563650.0863
6.1.A sumGHG 0.1550.0985 29649271。46079941.
7.1.B Sumgh0.843 0.519 3523112。29702071.

哇,太简单了,谢谢!。。。我没有想到子集
L1==“sumGHG”