我有一個 df 的降雨量,看起來像這樣:
# A tibble: 270,900 x 3
Sample.Date Gauge Rainfall
<date> <fct> <dbl>
1 2016-02-01 563061 0
2 2016-02-01 563064 0
3 2016-02-01 563065 0
4 2016-02-01 563069 0
5 2016-02-01 563070 0
6 2016-02-01 563083 0
7 2016-02-01 563090 0
8 2016-02-01 563146 0
9 2016-02-01 563149 0
10 2016-02-01 566008 0
# ... with 270,890 more rows
我有大約 134 個雨量計和每個雨量計的每日降雨量資料。
我想要做的是根據前一天的計算為每個儀表創建一個新列以進行計算。類似的東西:
df %>%
group_by(Gauge) %>%
mutate(Rain_Calc = if_else(Sample.Date == "2016-01-02", "1.0", "") %>% #set Rain_Calc for Day 1
mutate(Rain_Calc = 0.7 * (Rainfall Rain_Calc(Previous Day))
我的 df 從 02/01/2016 開始。我希望當天的 Rain_Calc 值(對于所有儀表)等于 1.0。
然后,我想計算串列中剩余日子的“Rain Calc”值(按日期順序)并執行計算。我還需要它按儀表分組。
我怎么可能做到這一點?
uj5u.com熱心網友回復:
我會為同一組中前幾天的降雨量創建一個新列,并對現在位于同一行的兩列進行計算。
df %>%
group_by(Gauge) %>%
arrange(Sample.Date) %>%
mutate(Rainfall.Lag1 = lag(Rainfall)) %>%
mutate(Sample.Date.Lag1 = lag(Sample.Date)) %>%
mutate(Rainfall.Lag1 = ifelse(as.double(difftime(Sample.Date, Sample.Date.Lag1, units="days")) == 1, Rainfall.Lag1, NA) %>%
mutate(Rain_Calc = 0.7 * (Rainfall Rainfall.Lag1)
uj5u.com熱心網友回復:
我不確定我是否理解你的計算,但我認為累積是你正在尋找的:
library(tidyverse)
library(purrr)
set.seed(1)
data <- tibble(date = rep(as.Date("2016-01-02") 0:2, 3),
gauge = rep(1:3,each=3),
rainfall = rgeom(9, 0.4))
data %>% group_by(gauge) %>%
arrange(date, .by_group = TRUE) %>%
mutate(rain_calc = accumulate(rainfall[-1], ~0.7*(.x .y),.init = 1))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/340034.html
上一篇:選擇只包含特定字母的字串
