今天是個好日子
假設我有這些年度資料集(即多年的 1 月 1 日至 12 月 31 日),這些資料集顯示了某個地區的各種發電機產生了多少能量。資料類似于下表。該表只有四個生成器(即生成器 A、B、C 和 D),并且僅涵蓋 2022 年,但請記住,實際資料集有很多超過四個生成器并涵蓋多年。
日期 | 發電機 | 型別 | 時期 | 容量 | 生產 |
---|---|---|---|---|---|
2022-01-01 | 一個 | 水電 | 1 | 12 | 10 |
2022-01-01 | 一個 | 水電 | 2 | 12 | 8 |
2022-01-01 | 一個 | 水電 | 3 | 12 | 5 |
2022-01-01 | 一個 | 水電 | 4 | 12 | 11 |
2022-01-01 | 乙 | 核 | 1 | 10 | 10 |
2022-01-01 | 乙 | 核 | 2 | 10 | 7 |
2022-01-01 | 乙 | 核 | 3 | 10 | 4 |
2022-01-01 | 乙 | 核 | 4 | 10 | 10 |
2022-01-01 | C | 風 | 1 | 15 | 12 |
2022-01-01 | C | 風 | 2 | 15 | 9 |
2022-01-01 | C | 風 | 3 | 15 | 7 |
2022-01-01 | C | 風 | 4 | 15 | 14 |
2022-01-01 | D | 水電 | 1 | 11 | 8 |
2022-01-01 | D | 水電 | 2 | 11 | 6 |
2022-01-01 | D | 水電 | 3 | 11 | 3 |
2022-01-01 | D | 水電 | 4 | 11 | 9 |
2022-01-02 | 一個 | 水電 | 1 | 12 | 9.5 |
2022-01-02 | 一個 | 水電 | 2 | 12 | 9 |
2022-01-02 | 一個 | 水電 | 3 | 12 | 4 |
2022-01-02 | 一個 | 水電 | 4 | 12 | 11 |
2022-01-02 | 乙 | 核 | 1 | 10 | 10 |
2022-01-02 | 乙 | 核 | 2 | 10 | 8 |
2022-01-02 | 乙 | 核 | 3 | 10 | 4 |
2022-01-02 | 乙 | 核 | 4 | 10 | 10 |
2022-01-02 | C | 風 | 1 | 15 | 11 |
2022-01-02 | C | 風 | 2 | 15 | 8 |
2022-01-02 | C | 風 | 3 | 15 | 7 |
2022-01-02 | C | 風 | 4 | 15 | 13 |
2022-01-02 | D | 水電 | 1 | 11 | 7.5 |
2022-01-02 | D | 水電 | 2 | 11 | 7 |
2022-01-02 | D | 水電 | 3 | 11 | 2 |
2022-01-02 | D | 水電 | 4 | 11 | 9 |
. | . | . | . | . | . |
. | . | . | . | . | . |
. | . | . | . | . | . |
2022-12-31 | 乙 | 核 | 4 | 80 | 73 |
2022-12-31 | C | 風 | 1 | 15 | 6 |
2022-12-31 | C | 風 | 2 | 15 | 3 |
2022-12-31 | C | 風 | 3 | 15 | 2 |
2022-12-31 | C | 風 | 4 | 15 | 8 |
2022-12-31 | D | 水電 | 1 | 11 | 6 |
2022-12-31 | D | 水電 | 2 | 11 | 6 |
2022-12-31 | D | 水電 | 3 | 11 | 2 |
2022-12-31 | D | 水電 | 4 | 11 | 8 |
我想創建另一個名為“差異”的列,顯示每個時間段和發電機的容量和產量之間的差異。這對于風能或核能發電機來說非常簡單,因為我可以只計算每個時間段的容量減去產量。
然而,對于每個水力機組,由于水力發電機的獨特性質,該程序并不那么簡單。我首先必須將每個時期的產能和產量之間的差值乘以發電機的產能減去當年的產量(即發電機當年的產能總和減去發電機產量的總和)。
例如,如果我想在 2022 年 1 月 1 日第 1 期計算水力發電機 A 的“差異”,我會這樣做:
(第 1 期的產能 - 第 1 期的產量)乘以(2022 年發電機 A 的產能總和 - 2022 年發電機 A 的產量總和)。所以它會是:(12-10) 乘以 (Z - X),其中“ Z ”=A 的 2022 容量總和,“ X ”=A 生產的 2022 總和。如果我在 2021 年日期執行此操作,那么我將不得不使用 2021 年的總和值(我希望我說得通)。
現在,我可以使用“mutate”功能輕松地為風力或核能發電機執行此操作。但我不確定我將如何為水力機組做到這一點。因此,如果有人可以幫助我,那就太好了!以下是您可以用來回答我的問題的示例資料框。請注意,下面的示例資料框僅涵蓋 2022 年 1 月 1 日至 2022 年 1 月 2 日,但實際資料集涵蓋了多年的 1 月 1 日至 12 月 31 日。
df <- data.frame(date=as.Date(c('1/1/2022', '1/1/2022', '1/1/2022', '1/1/2022',
'1/1/2022', '1/1/2022', '1/1/2022', '1/1/2022',
'1/1/2022', '1/1/2022', '1/1/2022', '1/1/2022',
'1/1/2022', '1/1/2022', '1/1/2022', '1/1/2022',
'1/2/2022', '1/2/2022', '1/2/2022', '1/2/2022',
'1/2/2022', '1/2/2022', '1/2/2022', '1/2/2022',
'1/2/2022', '1/2/2022', '1/2/2022', '1/2/2022',
'1/2/2022', '1/2/2022', '1/2/2022', '1/2/2022'), '%m/%d/%Y'),
Generator = c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'D', 'D', 'D', 'D',
'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'D', 'D', 'D', 'D'),
Type = c('Hydro', 'Hydro', 'Hydro', 'Hydro',
"Nuclear", "Nuclear", "Nuclear", "Nuclear",
"Wind", "Wind", "Wind", "Wind",
'Hydro', 'Hydro', 'Hydro', 'Hydro',
'Hydro', 'Hydro', 'Hydro', 'Hydro',
"Nuclear","Nuclear", "Nuclear", "Nuclear",
"Wind", "Wind", "Wind", "Wind",
'Hydro', 'Hydro', 'Hydro', 'Hydro'),
Period = c(1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4,
1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4),
Capacity = c(12, 12, 12, 12, 10, 10, 10, 10, 15, 15, 15, 15, 11, 11, 11, 11,
12, 12, 12, 12, 10, 10, 10, 10, 15, 15, 15, 15, 11, 11, 11, 11),
Production = c(10, 8, 5, 11, 10, 7, 4, 10, 12, 9, 7, 14, 8, 6, 3, 9,
9.5, 9, 4, 11, 10, 8, 4, 10, 11, 8, 7, 13, 7.5, 7, 2, 9))
最后,最終輸出應如下所示:
日期 | 發電機 | 型別 | 時期 | 容量 | 生產 | 區別 |
---|---|---|---|---|---|---|
2022-01-01 | 一個 | 水電 | 1 | 12 | 10 | 57 |
2022-01-01 | 一個 | 水電 | 2 | 12 | 8 | 114 |
2022-01-01 | 一個 | 水電 | 3 | 12 | 5 | 199.5 |
2022-01-01 | 一個 | 水電 | 4 | 12 | 11 | 28.5 |
2022-01-01 | 乙 | 核 | 1 | 10 | 10 | 0 |
2022-01-01 | 乙 | 核 | 2 | 10 | 7 | 3 |
2022-01-01 | 乙 | 核 | 3 | 10 | 4 | 6 |
2022-01-01 | 乙 | 核 | 4 | 10 | 10 | 0 |
2022-01-01 | C | 風 | 1 | 15 | 12 | 3 |
2022-01-01 | C | 風 | 2 | 15 | 9 | 6 |
2022-01-01 | C | 風 | 3 | 15 | 7 | 8 |
2022-01-01 | C | 風 | 4 | 15 | 14 | 1 |
2022-01-01 | D | 水電 | 1 | 11 | 8 | 109.5 |
2022-01-01 | D | 水電 | 2 | 11 | 6 | 182.5 |
2022-01-01 | D | 水電 | 3 | 11 | 3 | 292 |
2022-01-01 | D | 水電 | 4 | 11 | 9 | 73 |
2022-01-02 | 一個 | 水電 | 1 | 12 | 9.5 | 71.25 |
2022-01-02 | 一個 | 水電 | 2 | 12 | 9 | 85.5 |
2022-01-02 | 一個 | 水電 | 3 | 12 | 4 | 228 |
2022-01-02 | 一個 | 水電 | 4 | 12 | 11 | 28.5 |
2022-01-02 | 乙 | 核 | 1 | 10 | 10 | 0 |
2022-01-02 | 乙 | 核 | 2 | 10 | 8 | 2 |
2022-01-02 | 乙 | 核 | 3 | 10 | 4 | 6 |
2022-01-02 | 乙 | 核 | 4 | 10 | 10 | 0 |
2022-01-02 | C | 風 | 1 | 15 | 11 | 4 |
2022-01-02 | C | 風 | 2 | 15 | 8 | 7 |
2022-01-02 | C | 風 | 3 | 15 | 7 | 8 |
2022-01-02 | C | 風 | 4 | 15 | 13 | 2 |
2022-01-02 | D | 水電 | 1 | 11 | 7.5 | 127.75 |
2022-01-02 | D | 水電 | 2 | 11 | 7 | 146 |
2022-01-02 | D | 水電 | 3 | 11 | 2 | 328.5 |
2022-01-02 | D | 水電 | 4 | 11 | 9 | 73 |
同樣,(很抱歉如此重復),實際資料集涵蓋多年并且具有更多生成器,因此代碼/解決方案應盡可能“通用/靈活”,并且能夠用于更大的資料集。也就是說,解決方案不應該太“僵化”,以至于它只能用于解決上面的示例。如果多年來這樣做具有挑戰性,那么我們現在可以只關注特定的一年。
謝謝
uj5u.com熱心網友回復:
如果我理解正確,分組應該是每年(和Generator)。
一種方法是使用dplyr
scase_when
library(dplyr)
df %>%
group_by(year = strftime(date, format="%Y"), Generator) %>%
mutate(Difference = case_when(
Type == "Hydro" ~ (Capacity - Production) * (sum(Capacity) - sum(Production)),
Type == "Nuclear" | Type == "Wind" ~ Capacity - Production)) %>%
ungroup() %>%
select(-year)
# A tibble: 32 × 7
date Generator Type Period Capacity Production Difference
<date> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 2022-01-01 A Hydro 1 12 10 57
2 2022-01-01 A Hydro 2 12 8 114
3 2022-01-01 A Hydro 3 12 5 200.
4 2022-01-01 A Hydro 4 12 11 28.5
5 2022-01-01 B Nuclear 1 10 10 0
6 2022-01-01 B Nuclear 2 10 7 3
7 2022-01-01 B Nuclear 3 10 4 6
8 2022-01-01 B Nuclear 4 10 10 0
9 2022-01-01 C Wind 1 15 12 3
10 2022-01-01 C Wind 2 15 9 6
# … with 22 more rows
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/520924.html
標籤:r
上一篇:R中頁面和節點的Web抓取回圈