如何使用字符串变量访问 mutate() 中的现有列

How to access an existing column in mutate() with a string variable

我已经阅读了 Use dynamic variable names in `dplyr` 但我的问题是用一个存储为字符串变量的列名来改变一个已经存在的列。

data <- tibble::tribble(
  ~colA, ~colB,
  1, 2,
  3, 4
)

namestring <- "colA"

----

> data
# A tibble: 2 x 2
   colA  colB
  <dbl> <dbl>
1     1     2
2     3     4

> namestring
[1] "colA"

现在我想使用 namestring

修改 colA

没有namestring的想要的输出是这样的。

data %>%
  dplyr::mutate(colA = colB * 100)

## A tibble: 2 x 2
#   colA  colB
#  <dbl> <dbl>
#1   200     2
#2   400     4

但是使用 dplyr 编程时出现错误

namestring <- "colA"
data %>%
  dplyr::mutate(.data[[namestring]] = colB + 2)

# Error: unexpected '=' in:
# "data %>%
#   dplyr::mutate(.data[[namestring]] ="

filterselect 在 LHS

上使用 .data[[string]] 不会产生相同类型的错误
data %>%
  dplyr::filter(.data[[namestring]] == 3)

## A tibble: 1 x 2
#   colA  colB
#  <dbl> <dbl>
#1     3     4

我们可以使用 :=!!

library(dplyr)
data %>% 
    mutate(!! namestring := colB * 100)

-输出

# A tibble: 2 x 2
#   colA  colB
#  <dbl> <dbl>
#1   200     2
#2   400     4    

或者可以在across

以内
data %>%
    mutate(across(all_of(namestring), ~ colB* 100))
# A tibble: 2 x 2
#   colA  colB
#  <dbl> <dbl>
#1   200     2
#2   400     4