मैं dplyr फ़िल्टर में कॉलम नाम और चर के लिए ऑब्जेक्ट्स का उपयोग करने का प्रयास कर रहा हूं? मैंने कुछ पोस्ट पढ़ी हैं, लेकिन उनमें से कोई भी काम नहीं कर पा रहा है (कैरेक्टर ऑब्जेक्ट का उपयोग करके आप dplyr वाले कॉलम का नाम कैसे बदल सकते हैं)। यह काम करता है अगर मैं कॉलम और वेरिएबल्स का नाम देता हूं, लेकिन अगर मैं उन्हें नीचे के रूप में प्रीअसाइन नहीं करता हूं। मैं कॉलम और वेरिएबल्स को गतिशील रूप से नाम देने में सक्षम होना चाहता हूं।

col <- "Species"
vars <- c("setosa", "versicolor")

r <- iris %>%
  filter(col %in% vars)

r <- iris %>%
  filter(Species %in% c("setosa", "versicolor"))
1
Mike 4 सितंबर 2021, 21:51

2 जवाब

सबसे बढ़िया उत्तर

हम across या if_all/if_any का उपयोग कर सकते हैं (इससे कोई फर्क नहीं पड़ता क्योंकि केवल एक ही कॉलम है)

library(dplyr)
out <- iris %>%
   filter(across(all_of(col), ~ . %in% vars))

-चेकिंग

> unique(out$Species)
[1] setosa     versicolor
Levels: setosa versicolor virginica

या दूसरा विकल्प है symबोल में कनवर्ट करना और मूल्यांकन करना (!!)

out2 <- iris %>%
   filter(!! rlang::sym(col) %in% vars)

-चेकिंग

> identical(out, out2)
[1] TRUE
1
akrun 4 सितंबर 2021, 18:52

अन्य विकल्पों की जोड़ी -

#1. Use `.data` - 

library(dplyr)
iris %>% filter(.data[[col]] %in% vars)

#    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
#1            5.1         3.5          1.4         0.2     setosa
#2            4.9         3.0          1.4         0.2     setosa
#3            4.7         3.2          1.3         0.2     setosa
#4            4.6         3.1          1.5         0.2     setosa
#5            5.0         3.6          1.4         0.2     setosa
#...
#...

#2. In base R - 

iris[iris[[col]] %in% vars, ]
0
Ronak Shah 5 सितंबर 2021, 02:05