2 votes

Comment faire fonctionner la fonction complete de tidyr avec une variable spécifiant des colonnes ?

Voici un peu de code utilisant complete :

dat <- data.frame(a=c(1,NA), b=c(3,NA), val=c(20,30))
dat %>% complete(a, b, fill=list(val=0))

# A tibble: 4 x 3
      a     b   val
  <dbl> <dbl> <dbl>
1     1     3    20
2     1    NA     0
3    NA     3     0
4    NA    NA    30

Comment puis-je créer une fonction qui prend les colonnes pour compléter ? Voici une tentative ratée :

foo_func <- function(dat, the_cols) {
  dat %>% complete(all_of(the_cols), fill=list(val=0))
}
foo_func(dat, c('a', 'b'))

Error: Join columns must be present in data.
x Problem with `all_of(the_cols)`.

En voici un autre :

foo_func <- function(dat, the_cols) {
  dat %>% complete(!!the_cols, fill=list(val=0))
}
foo_func(dat, c('a', 'b'))

Error: Join columns must be present in data.
x Problem with `<chr>`

Je veux the_cols pour être un vecteur de caractères, parce qu'il s'agit d'un code existant qui transmet les choses de cette manière.

2voto

akrun Points 148302

Nous pourrions convertir en sym bols et utilisation !!!

foo_func <- function(dat, the_cols) {
  dat %>% complete(!!! rlang::syms(the_cols), fill=list(val=0))
}

-vérification

foo_func(dat, c('a', 'b'))
# A tibble: 4 x 3
#      a     b   val
#  <dbl> <dbl> <dbl>
#1     1     3    20
#2     1    NA     0
#3    NA     3     0
#4    NA    NA    30

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X