2016-11-13 1 views
1

Je ne parviens pas à créer la fonction complète tidyr complète() avec les noms de colonnes en tant que variables en cours d'exécution. En utilisant l'exemple intégré:tidyr complete() avec colnames comme variables

df <- data_frame(
group = c(1:2, 1), 
item_id = c(1:2, 2), 
item_name = c("a", "b", "b"), 
value1 = 1:3, 
value2 = 4:6 
) 

df %>% complete(group, nesting(item_id, item_name)) 

... fonctionne comme prévu

gr="group" 
id="item_id" 
name="item_name" 
df %>% complete_(gr, nesting_(id, name),fill = list(NA)) 

... mais ne jette pas une erreur, mais ne fonctionne pas non plus

Toute aide appréciée !

+0

Selon le code source, 'nesting_' ne prend qu'un argument (une liste). –

+0

Est-ce censé lancer une flèche, je me demande? –

+0

@David Arenburg: C'est le cas quand fill = list (NA) est manquant – ChriiSchee

Répondre

1

je pense qu'il est un bug qui complete_ peut ne pas fonctionner avec data.frames ou colonnes de la liste comme complete peut, mais voici une solution à l'aide unite_ et separate pour simuler nesting:

df %>% unite_('id_name', c(id, name)) %>% 
    complete_(c(gr, 'id_name')) %>% 
    separate(id_name, c(id, name)) 

## # A tibble: 4 × 5 
## group item_id item_name value1 value2 
## * <dbl> <chr>  <chr> <int> <int> 
## 1  1  1   a  1  4 
## 2  1  2   b  3  6 
## 3  2  1   a  NA  NA 
## 4  2  2   b  2  5 
+0

Merci pour votre réponse @alistaire cela fonctionne bien pour les petites images. Lorsque j'essaie le motif sur un grand objet, j'obtiens un message d'avertissement: Trop de valeurs à 691968 emplacements: ... et la fonction ne complète pas l'ensemble de la trame de données – ChriiSchee

+0

Cette erreur est généralement due au fait que d'autres caractères de séparation existent déjà dans les données , et donc ça se fend trop de fois. Le paramètre 'sep' de' separate' est par défaut n'importe quel caractère non-alphanumérique, mais vous pouvez le limiter au séparateur utilisé par 'unite' (' _' par défaut) en ajoutant 'sep = '_''. – alistaire

+0

Vous avez raison. c'était en fait le cas dans mon ensemble de données. Je vous remercie – ChriiSchee