所以我有資料爭論的問題。
這是我的示例資料。
year <- c(2019, 2019, 2020, 2020, 2021, 2021, 2021)
sn <- c("AB1001", "AB1002", "AB1001", "DC1001", "AB1002", "AB1001", "AB1003")
hours <- c(150, 173, 189, 102, 175, 215, 98)
delta_hours <- c(150, 173, 39, 102, NA, NA, NA)
df <- data.frame(year, sn, hours, delta_hours)
產生這個資料框:
year sn hours delta_hours
1 2019 AB1001 150 150
2 2019 AB1002 173 173
3 2020 AB1001 189 39
4 2020 DC1001 102 102
5 2021 AB1002 175 NA
6 2021 AB1001 215 NA
7 2021 AB1003 98 NA
我需要做的是改變/更新 2021 年的 delta_hours 列。具體來說,對于獨特的 sn(前幾年沒有),我希望能夠簡單地復制 hours 列中的資訊。對于前幾年出現的那些 sn,我想用最近一年的小時數減去 2021 年的小時數。所以對于sn AB1001,我想采取215 - 189才能得到26。對于 snAB1003我想簡單地復制98. 當然,對于 2021 年之前的任何一年,我只想保留這些資訊。
我的最終資料框基本上應該是這樣的:
year sn hours delta_hours
1 2019 AB1001 150 150
2 2019 AB1002 173 173
3 2020 AB1001 189 39
4 2020 DC1001 102 102
5 2021 AB1002 175 2
6 2021 AB1001 215 26
7 2021 AB1003 98 98
我假設我需要使用case_when,我可以這樣做來獲取前幾年的資料以簡單地復制,但我不知道如何正確地進行減法。
幫助表示贊賞!謝謝!
uj5u.com熱心網友回復:
library(dplyr)
df %>%
group_by(sn) %>%
mutate(
delta_hours = if_else(year == 2021, hours - lag(hours), delta_hours),
delta_hours = if_else(is.na(delta_hours), hours, delta_hours)
)
# A tibble: 7 x 4
# Groups: sn [4]
year sn hours delta_hours
<dbl> <chr> <dbl> <dbl>
1 2019 AB1001 150 150
2 2019 AB1002 173 173
3 2020 AB1001 189 39
4 2020 DC1001 102 102
5 2021 AB1002 175 2
6 2021 AB1001 215 26
7 2021 AB1003 98 98
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/313016.html
上一篇:我將如何按具有等效前綴的列分組并對它們求和?[復制]
下一篇:如何按多列的值重復行并劃分回來
