วิธีเข้าถึงคอลัมน์ที่มีอยู่ใน mutate () ด้วยตัวแปรสตริง [ซ้ำ]

Jan 09 2021

ฉันอ่านใช้ชื่อตัวแปรแบบไดนามิกใน "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"

ตอนนี้ฉันต้องการแก้ไข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]] ="

filterและselectอย่าให้เกิดข้อผิดพลาดแบบเดียวกันกับที่ใช้.data[[string]]กับ LHS

data %>%
  dplyr::filter(.data[[namestring]] == 3)

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

คำตอบ

2 akrun Jan 09 2021 at 04:46

เราสามารถใช้:=กับ!!

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