代码:
> data_merged_ex
# A tibble: 5 × 8
seqg cyl piip.x piip.y dalo.x dalo.y tcct.x tcct.y
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 7894 0 1.1 1.1 2.7 NA 242 NA
2 1597 2 NA NA NA 2.7 NA 196
3 2586 1 0.7 0.7 2.2 4.3 161 NA
4 4679 0 0.6 NA 1.4 2.2 239 NA
5 8371 0 0.5 1.3 1.6 NA 206 NA
data_merged_ex_t <- data_merged_ex %>%
mutate(across(
.cols = ends_with(".x"),
.fns = ~ case_when(
!is.na(.data[[cur_column()]]) & !is.na(.data[[str_replace(cur_column(), "\\.x$", ".y")]]) ~ .data[[str_replace(cur_column(), "\\.x$", ".y")]],
is.na(.data[[cur_column()]]) & !is.na(.data[[str_replace(cur_column(), "\\.x$", ".y")]]) ~ .data[[str_replace(cur_column(), "\\.x$", ".y")]],
!is.na(.data[[cur_column()]]) & is.na(.data[[str_replace(cur_column(), "\\.x$", ".y")]]) ~ .data[[cur_column()]],
TRUE ~ NA_real_
),
.names = "{str_remove(.col, '\\.x$')}"
))
Error in `cur_column()`:
! Must only be used inside `across()`.
Run `rlang::last_trace()` to see where the error occurred.
> rlang::last_trace()
<error/rlang_error>
Error in `cur_column()`:
! Must only be used inside `across()`.
---
Backtrace:
▆
1. ├─mc_merged_sy %>% ...
2. ├─dplyr::mutate(...)
3. ├─dplyr:::mutate.data.frame(...)
4. │ ├─dplyr:::mutate_cols(.data, dplyr_quosures(...), by)
5. │ │ └─base::force(dots)
6. │ └─dplyr:::dplyr_quosures(...)
7. │ └─rlang::quos(..., .ignore_empty = "all")
8. └─dplyr::cur_column()
Run rlang::last_trace(drop = FALSE) to see 4 hidden frames.
> rlang::last_trace(drop = FALSE)
<error/rlang_error>
Error in `cur_column()`:
! Must only be used inside `across()`.
---
Backtrace:
▆
1. ├─mc_merged_sy %>% ...
2. ├─dplyr::mutate(...)
3. ├─dplyr:::mutate.data.frame(...)
4. │ ├─dplyr:::mutate_cols(.data, dplyr_quosures(...), by)
5. │ │ └─base::force(dots)
6. │ └─dplyr:::dplyr_quosures(...)
7. │ └─rlang::quos(..., .ignore_empty = "all")
8. └─dplyr::cur_column()
9. └─dplyr:::peek_column()
10. └─dplyr:::context_peek("column", "`across()`", call)
11. ├─context_peek_bare(name) %||% ...
12. └─rlang::abort(glue("Must only be used inside {location}."), call = call)
您可以旋转到长时间,然后执行逻辑,然后向后旋转:
pivot_longer(data_merged_ex, -c(seqg, cyl),
names_to=c("name", ".value"),
names_pattern="(.*).(.)") %>%
mutate(z=case_when(!is.na(y)~y,
!is.na(x)~x,
.default=NA), .by=c(seqg, name)) %>%
pivot_wider(id_cols=c(seqg,cyl),
values_from=c(x,y,z),
names_vary = "slowest",
names_glue = "{name}.{.value}")