Skip to content

Commit 9f4f084

Browse files
Merge pull request #378 from ldecicco-USGS/main
Slightly cleaner
2 parents d222034 + 40eee7d commit 9f4f084

File tree

1 file changed

+54
-49
lines changed

1 file changed

+54
-49
lines changed

vignettes/Join_closest.Rmd

+54-49
Original file line numberDiff line numberDiff line change
@@ -135,21 +135,42 @@ knitr::kable(head(qw_greater))
135135
So now to find the closest data in either direction, we can use some logic to determine the absolute closest values:
136136

137137
```{r finalJoin}
138+
139+
closest_nums <- function(delta_uv_val,
140+
delta_time_l, delta_time_g,
141+
uv_val_l, uv_val_g){
142+
143+
case_when(delta_uv_val == 0 ~ uv_val_g,
144+
is.na(uv_val_g) ~ uv_val_l,
145+
is.na(uv_val_l) ~ uv_val_g,
146+
delta_time_g < abs(delta_time_l) ~ uv_val_g,
147+
delta_time_g >= abs(delta_time_l) ~ uv_val_l,
148+
TRUE ~ uv_val_g)
149+
}
150+
151+
closest_time <- function(delta_uv_val,
152+
delta_time_l, delta_time_g,
153+
uv_time_l, uv_time_g,
154+
uv_val_l, uv_val_g){
155+
156+
case_when(delta_uv_val == 0 ~ uv_time_g,
157+
is.na(uv_val_g) ~ uv_time_l,
158+
is.na(uv_val_l) ~ uv_time_g,
159+
delta_time_g < abs(delta_time_l) ~ uv_time_g,
160+
delta_time_g >= abs(delta_time_l) ~ uv_time_l,
161+
TRUE ~ uv_time_g)
162+
}
163+
138164
qw_closest <- qw_greater |>
139165
left_join(qw_less) |>
140166
mutate(delta_uv_val = uv_val_close_greater - uv_val_close_less,
141-
val_uv = case_when(delta_uv_val == 0 ~ uv_val_close_greater,
142-
is.na(uv_val_close_greater) ~ uv_val_close_less,
143-
is.na(uv_val_close_less) ~ uv_val_close_greater,
144-
delta_time_greater < abs(delta_time_less) ~ uv_val_close_greater,
145-
delta_time_greater >= abs(delta_time_less) ~ uv_val_close_less,
146-
TRUE ~ uv_val_close_greater),
147-
closest_uv_dt = case_when(delta_uv_val == 0 ~ uv_date_greater,
148-
is.na(uv_val_close_greater) ~ uv_date_less,
149-
is.na(uv_val_close_less) ~ uv_date_greater,
150-
delta_time_greater < abs(delta_time_less) ~ uv_date_greater,
151-
delta_time_greater >= abs(delta_time_less) ~ uv_date_less,
152-
TRUE ~ uv_date_greater)) |>
167+
val_uv = closest_nums(delta_uv_val,
168+
delta_time_less, delta_time_greater,
169+
uv_val_close_less, uv_val_close_greater),
170+
closest_uv_dt = closest_time(delta_uv_val,
171+
delta_time_less, delta_time_greater,
172+
uv_date_less, uv_date_greater,
173+
uv_val_close_less, uv_val_close_greater)) |>
153174
select(-uv_date_greater, -uv_date_less,
154175
-uv_val_close_greater, -uv_val_close_less,
155176
-delta_time_greater, -delta_time_less) |>
@@ -189,7 +210,7 @@ uv_flow_qw2 <- uv_flow_qw |>
189210
190211
```
191212

192-
Next, we'll create a function that does the same joins we described above, but adds some flexibility. You can see by the number of lines it gets pretty complicated pretty fast.
213+
Next, we'll create a function that does the same joins we described above, but adds some flexibility. You can see by the number of lines it gets pretty complicated pretty fast. The function requires `closest_nums` and `closest_time` as described above.
193214

194215
The inputs are:
195216

@@ -280,30 +301,22 @@ join_qw_uv <- function(qw_data, uv_flow_qw,
280301
if("qw_val_close_greater" %in% names(qw_closest)){
281302
qw_closest <- qw_closest |>
282303
mutate(delta_qw_val = qw_val_close_greater - qw_val_close_less,
283-
qw_uv_val = case_when(delta_qw_val == 0 ~ qw_val_close_greater,
284-
is.na(qw_val_close_greater) ~ qw_val_close_less,
285-
is.na(qw_val_close_less) ~ qw_val_close_greater,
286-
delta_time_greater < abs(delta_time_less) ~ qw_val_close_greater,
287-
delta_time_greater >= abs(delta_time_less) ~ qw_val_close_less,
288-
TRUE ~ qw_val_close_greater),
289-
closest_uv = case_when(delta_qw_val == 0 ~ uv_date_greater,
290-
is.na(qw_val_close_greater) ~ uv_date_less,
291-
is.na(qw_val_close_less) ~ uv_date_greater,
292-
delta_time_greater < abs(delta_time_less) ~ uv_date_greater,
293-
delta_time_greater >= abs(delta_time_less) ~ uv_date_less,
294-
TRUE ~ uv_date_greater)) |>
304+
qw_uv_val = closest_nums(delta_qw_val,
305+
delta_time_less, delta_time_greater,
306+
qw_val_close_less, qw_val_close_greater),
307+
closest_uv = closest_time(delta_qw_val,
308+
delta_time_less, delta_time_greater,
309+
uv_date_less, uv_date_greater,
310+
qw_val_close_less, qw_val_close_greater)) |>
295311
select(-qw_val_close_greater, -qw_val_close_less) |>
296312
select(qw_uv_val, {{ join_by_qw }}, closest_uv, everything())
297313
}
298314
299315
if("qw_rmk_close_greater" %in% names(qw_closest)){
300316
qw_closest <- qw_closest |> # breaks down if there wasn't a val but was a rmk
301-
mutate(qw_uv_rmk = case_when(delta_qw_val == 0 ~ qw_rmk_close_greater,
302-
is.na(qw_rmk_close_greater) ~ qw_rmk_close_less,
303-
is.na(qw_rmk_close_less) ~ qw_rmk_close_greater,
304-
delta_time_greater < abs(delta_time_less) ~ qw_rmk_close_greater,
305-
delta_time_greater >= abs(delta_time_less) ~ qw_rmk_close_less,
306-
TRUE ~ qw_rmk_close_greater)) |>
317+
mutate(qw_uv_rmk = closest_nums(delta_qw_val,
318+
delta_time_less, delta_time_greater,
319+
qw_rmk_close_less, qw_rmk_close_greater)) |>
307320
select(-qw_rmk_close_greater, -qw_rmk_close_less) |>
308321
select(qw_uv_val, qw_uv_rmk,
309322
{{ join_by_qw }}, closest_uv, everything())
@@ -312,36 +325,28 @@ join_qw_uv <- function(qw_data, uv_flow_qw,
312325
if(!"closest_uv" %in% names(qw_closest)){
313326
qw_closest <- qw_closest |>
314327
mutate(delta_flow_val = flow_val_close_greater - flow_val_close_less,
315-
closest_uv = case_when(delta_flow_val == 0 ~ uv_date_greater,
316-
is.na(flow_val_close_greater) ~ uv_date_less,
317-
is.na(flow_val_close_less) ~ uv_date_greater,
318-
delta_time_greater < abs(delta_time_less) ~ uv_date_greater,
319-
delta_time_greater >= abs(delta_time_less) ~ uv_date_less,
320-
TRUE ~ uv_date_greater))
328+
closest_uv = closest_time(delta_flow_val,
329+
delta_time_less, delta_time_greater,
330+
uv_date_less, uv_date_greater,
331+
flow_val_close_less, flow_val_close_greater))
321332
}
322333
323334
if("flow_val_close_greater" %in% names(qw_closest)){
324335
325336
qw_closest <- qw_closest |>
326337
mutate(delta_flow_val = flow_val_close_greater - flow_val_close_less,
327-
flow_val = case_when(delta_flow_val == 0 ~ flow_val_close_greater,
328-
is.na(flow_val_close_greater) ~ flow_val_close_less,
329-
is.na(flow_val_close_less) ~ flow_val_close_greater,
330-
delta_time_greater < abs(delta_time_less) ~ flow_val_close_greater,
331-
delta_time_greater >= abs(delta_time_less) ~ flow_val_close_less,
332-
TRUE ~ flow_val_close_greater)) |>
338+
flow_val = closest_nums(delta_flow_val,
339+
delta_time_less, delta_time_greater,
340+
flow_val_close_less, flow_val_close_greater)) |>
333341
select(-flow_val_close_greater, -flow_val_close_less) |>
334342
select(uv_flow_val = flow_val, {{ join_by_qw }}, closest_uv, everything())
335343
}
336344
337345
if("flow_rmk_close_greater" %in% names(qw_closest)){
338346
qw_closest <- qw_closest |>
339-
mutate(flow_rmk = case_when(delta_flow_val == 0 ~ flow_rmk_close_greater,
340-
is.na(flow_rmk_close_greater) ~ flow_rmk_close_less,
341-
is.na(flow_rmk_close_less) ~ flow_rmk_close_greater,
342-
delta_time_greater < abs(delta_time_less) ~ flow_rmk_close_greater,
343-
delta_time_greater >= abs(delta_time_less) ~ flow_rmk_close_less,
344-
TRUE ~ flow_rmk_close_greater)) |>
347+
mutate(flow_rmk = closest_nums(delta_flow_val,
348+
delta_time_less, delta_time_greater,
349+
flow_rmk_close_less, flow_rmk_close_greater)) |>
345350
select(-flow_rmk_close_greater, -flow_rmk_close_less) |>
346351
select(uv_flow_val, uv_flow_rmk = flow_rmk,
347352
{{ join_by_qw }}, closest_uv, everything())

0 commit comments

Comments
 (0)