работа труб на одном столбце по группам - PullRequest
1 голос
/ 18 июня 2020

Это повторяющаяся у меня проблема. Часть моего набора данных:

   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 elements и соответствующий sumGHG элемент. Например, я хотел бы создать новый столбец, чтобы первая строка была произведением unc.max*emi.agg этой строки, деленного на unc.max*emi.agg строки sumGHG, соответствующей тому же L2. Тогда первая строка будет:

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")

1 Ответ

1 голос
/ 18 июня 2020

Думаю, что-то вроде этого может помочь, используя group_by.

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    
...