簡體   English   中英

dplyr NSE-如何將列名傳遞給mutate函數調用?

[英]dplyr NSE - how pass column names to mutate function call?

我想在變量中指定的列上使用gsub參數來使數據框的列發生突變,但是我在非標准求值方法上苦苦掙扎。

在這個玩具示例中,我想在調用gsub時使用columns[[1]]columns[[2]]代替.$name_A.$name_B 我可以還是需要重新考慮自己的方法?

library(tidyverse)

test_df <- tibble(name_A = 
                   c("asdf", "ghjk"),
                 name_B =
                   c("qwer", "tyui"))

columns <- c("name_A", "name_B")

test_df %>%
  mutate(new_col_A = 
           gsub(pattern = 'asdf', replacement = 'NEW_VALUE_A', x = .$name_A),
         new_col_B = 
           gsub(pattern = 'tyui', replacement = 'NEW_VALUE_B', x = .$name_B))

你快到了 您可以將rlang::syms!!一起使用!! 做你需要的。

library(tidyverse)

test_df <- tibble(name_A = 
                    c("asdf", "ghjk"),
                  name_B =
                    c("qwer", "tyui"))

columns <- rlang::syms(c("name_A", "name_B"))

test_df %>%
  mutate(new_col_A = 
           gsub(pattern = 'asdf', replacement = 'NEW_VALUE_A', x = !! columns[[1]]),
         new_col_B = 
           gsub(pattern = 'tyui', replacement = 'NEW_VALUE_B', x = !! columns[[2]]))

我不是100%肯定你問什么,而是你可以使用正則表達式會發生變異,適用於使用列mutate_atmatches

library(tidyverse)

test_df %>% 
  mutate_at(vars(matches('A')), 
            function(.x) gsub(pattern = 'asdf', 
                              replacement = 'NEW_VALUE_A', .x)) %>% 
  mutate_at(vars(matches('B')), 
            function(.x) gsub(pattern = 'tyui', 
                         replacement = 'NEW_VALUE_B', .x))

希望有幫助!

編輯-您也可以按索引調用:

test_df %>% 
mutate_at(vars(1), 
          function(.x) gsub(pattern = 'asdf',
                            replacement = 'NEW_VALUE_A', .x)) %>%
mutate_at(vars(2),
          function(.x) gsub(pattern = 'tyui',
                            replacement = 'NEW_VALUE_B', .x))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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