Sans fonction, voici comment vous le faites en utilisant dplyr
:
library(dplyr)
df %>%
select(starts_with("z_"))
Vous pouvez également créer une fonction et passer dans une chaîne pour le nom de la variable comme celui-ci :
get_var= function(df, var){
df %>%
select(starts_with(paste0(var, "_")))
}
get_var(df, "z")
maintenant, la partie la plus délicate vient quand vous essayez de passer dans le nom de la variable sans le citer en fonction (le code de R, et non pas la valeur qu'il contient). Une façon de le faire serait deparse
+ substitute
R. base Ce convertit le symbole fourni var
à une chaîne, ce qui est pratique pour une utilisation ultérieure dans la fonction:
get_var = function(df, var){
var_quo = deparse(substitute(var))
df %>%
select(starts_with(paste0(var_quo, "_")))
}
Enfin, voici comment faire la même chose avec enquo
et quo_name
dans rlang/tidyverse
package:
library(rlang)
get_var = function(df, var){
var_quo = quo_name(enquo(var))
df %>%
select(starts_with(paste0(var_quo, "_")))
}
get_var(df, z)
get_var(df, y)
Résultat:
# A tibble: 1 x 2
z_1 z_2
<dbl> <dbl>
1 1 2
# A tibble: 1 × 2
y_1 y_2
<dbl> <dbl>
1 10 20
Notes:
- quosures sont des expressions qui cite gardent la trace d'un environnement.
enquo
prend un symbole faisant référence à l'argument d'une fonction, cite le code R et l'associe à l'environnement de la fonction dans une quosure. Formate une quosure en une chaîne, qui peut être utilisée plus tard dans la fonction.
quo_text
est similaire à quo_name
mais ne vérifie pas si l'entrée est un symbole.
Vérifiez ces:
rlang
documentation
- Non-Standard Evaluation in R
?enquo
?quo_name
Si vous pouvez passer un nom de variable à votre sélection, je vais upvote. 'starts_with' est l'approche que j'utiliserais – CPak
@CPark je vois. Donc vous voulez pouvoir passer la variable elle-même et pas une chaîne comme '" z "'? Par exemple, 'get_var (df," z ")' ne serait pas satisfaisant? – useR
Je ne suis pas le OP btw. Fondamentalement, OP veut définir une fonction où la trame de données et la colonne à sélectionner sont transmises dynamiquement en tant qu'arguments. – CPak