एक स्ट्रिंग चर [डुप्लिकेट] के साथ म्यूट () में मौजूदा स्तंभ तक कैसे पहुंचें

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

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और LHS selectका उपयोग करके एक ही तरह की त्रुटि उत्पन्न नहीं करते हैं.data[[string]]

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