วิธีเข้าถึงคอลัมน์ที่มีอยู่ใน mutate () ด้วยตัวแปรสตริง [ซ้ำ]
ฉันอ่านใช้ชื่อตัวแปรแบบไดนามิกใน "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
เราสามารถใช้:=
กับ!!
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