问题 - 使用突变()

问题描述 投票:0回答:1
问题: 我想使用以下逻辑(示例)创建名为“ trig'的新变量(保留旧变量)(在末尾没有'.x'或.y'):我希望新变量假设'。 y'值不丢失时,并且缺少它,新变量应该假设'.x'。当两者都缺少时,该变量应丢失。

代码:

> 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}")

r mutate across
1个回答
0
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.