簡體   English   中英

當有多個“。”時如何使用 mutate c_across 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     

如何使用mutatec_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM