[英]How to use mutate across with a custom function with multiple arguments
[英]how to use mutate c_across when there's multiple “.” arguments in the same line
我正在嘗試使用rowwise %>% mutate_at(ifelse())
,我之前已經成功地使用 mutate_at 與 dplyr 版本 < 1.0.0 一起使用,但我不確定如何使用它across
function 中的新功能來完成它。
這是我的數據框中的行和列的子集
data <- data.frame(level_1_name = c("coverage.modifier", "coverage.modifier", "something_else"),
level_1_type = c("static", "static", "static"),
level_1_a = c(NA, "1", "2"),
level_2_name = c("something_else", "something_else", "something_else"),
level_2_type = c("static", "static", "static"),
level_2_a = c(NA, "1", "2"),
stringsAsFactors = F)
我想要完成的可以通過以下方式完成
library(dplyr) ; library(rlang) ; library(tidyselect) ; library(magrittr)
data %>%
rowwise() %>%
mutate_at(vars(which(grepl(pattern = "coverage.modifier", .)) + 2),
funs(ifelse(eval_tidy(sym(gsub("_a", "_name", as_name(quo(.))))) == "coverage.modifier" && is.na(.), "", .))) %>%
ungroup()
與 output
# A tibble: 3 x 6
level_1_name level_1_type level_1_a level_2_name level_2_type level_2_a
<chr> <chr> <chr> <chr> <chr> <chr>
1 coverage.modifier static "" something_else static NA
2 coverage.modifier static "1" something_else static 1
3 something_else static "2" something_else static 2
如何使用mutate
和c_across
而不是mutate_at
重新創建它? 謝謝!
如果我理解正確,您希望使用名稱為 ' {something} _a' 的所有列並將NA
替換為''
,但僅限於名為 ' {something} _name' 的相應列的值為'coverage.modifier'
.
這是使用 cross across
一種方法:
data %>%
mutate(across(ends_with('_a'),
~replace(.,
is.na(.) &
grepl('coverage.modifier',
cur_data()[[sub('_a$', '_name', cur_column())]]),
'')))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.