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_at
和 matches
:
的列应用变异
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))
我想在变量中指定的列上使用 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_at
和 matches
:
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))