2017-03-17 8 views
3

J'essaie de remplir les valeurs manquantes dans ma base de données, mais je ne veux pas toutes les combinaisons possibles de variables - je veux seulement remplir en fonction d'un groupe de trois variables : coursecode, année et semaine.Remplir les valeurs manquantes dans data.frame en utilisant dplyr complet au sein des groupes

Je l'ai regardé dans complet() dans tidyr bibliothèque, mais je ne peux pas le faire fonctionner, même après avoir regardé Using tidyr::complete with group_by et https://blog.rstudio.org/2015/09/13/tidyr-0-3-0/

J'ai des observateurs qui recueillent des données sur les semaines données de l'année à différents cours. Par exemple, les données peuvent être collectées dans mon ensemble de données plus volumineux pour les semaines 1 à 10, mais je me soucie seulement des semaines manquantes qui se sont produites dans une combinaison de cours-année particulière. Par ex,

  • En cours A en année , les données ont été recueillies sur semaines 1, 3 et 4. Je veux savoir que semaine 2 est manquant.
  • Je ne foutais cette semaine 5 manque, même si quelqu'un d'autre au cours B a recueilli des données sur la semaine 5 en 2000.

Exemple:

library(dplyr) 
library(tidyr) 

df <- data.frame(coursecode = rep(c("A", "B"), each = 6), 
       year = rep(c(2000, 2000, 2000, 2001, 2001, 2001), 2), 
       week = c(1, 3, 4, 1, 2, 3, 2, 3, 5, 3, 4, 5), 
       values = c(1:12), 
       othervalues = c(12:23), 
       region = "Big") 

df 

    coursecode year week values othervalues region 
1   A 2000 1  1   12 Big 
2   A 2000 3  2   13 Big 
3   A 2000 4  3   14 Big 
4   A 2001 1  4   15 Big 
5   A 2001 2  5   16 Big 
6   A 2001 3  6   17 Big 
7   B 2000 2  7   18 Big 
8   B 2000 3  8   19 Big 
9   B 2000 5  9   20 Big 
10   B 2001 3  10   21 Big 
11   B 2001 4  11   22 Big 
12   B 2001 5  12   23 Big 

essayer avec complet: (pas ma sortie désirée)

df %>% 
     complete(coursecode, year, region, nesting(week)) 

# A tibble: 20 x 6 
    coursecode year region week values othervalues 
     <fctr> <dbl> <fctr> <dbl> <int>  <int> 
1   A 2000 Big  1  1   12 
2   A 2000 Big  2  NA   NA 
3   A 2000 Big  3  2   13 
4   A 2000 Big  4  3   14 
5   A 2000 Big  5  NA   NA 
6   A 2001 Big  1  4   15 
7   A 2001 Big  2  5   16 
8   A 2001 Big  3  6   17 
9   A 2001 Big  4  NA   NA 
10   A 2001 Big  5  NA   NA 
11   B 2000 Big  1  NA   NA 
12   B 2000 Big  2  7   18 
13   B 2000 Big  3  8   19 
14   B 2000 Big  4  NA   NA 
15   B 2000 Big  5  9   20 
16   B 2001 Big  1  NA   NA 
17   B 2001 Big  2  NA   NA 
18   B 2001 Big  3  10   21 
19   B 2001 Big  4  11   22 
20   B 2001 Big  5  12   23 

sortie souhaitée

coursecode year region week values othervalues 
     <fctr> <dbl> <fctr> <dbl> <int>  <int> 
1   A 2000 Big  1  1   12 
2   A 2000 Big  2  NA   NA 
3   A 2000 Big  3  2   13 
4   A 2000 Big  4  3   14 
5   A 2001 Big  1  4   15 
6   A 2001 Big  2  5   16 
7   A 2001 Big  3  6   17 
8   B 2000 Big  2  7   18 
9   B 2000 Big  3  8   19 
10   B 2000 Big  4  NA   NA 
11   B 2000 Big  5  9   20 
12   B 2001 Big  3  10   21 
13   B 2001 Big  4  11   22 
14   B 2001 Big  5  12   23 

Répondre

3

Nous pouvons essayer avec expand et left_join

library(dplyr) 
library(tidyr) 
df %>% 
    group_by(coursecode, year, region) %>% 
    expand(week = full_seq(week, 1)) %>% 
    left_join(., df) 
# coursecode year region week values othervalues 
#  <fctr> <dbl> <fctr> <dbl> <int>  <int> 
#1   A 2000 Big  1  1   12 
#2   A 2000 Big  2  NA   NA 
#3   A 2000 Big  3  2   13 
#4   A 2000 Big  4  3   14 
#5   A 2001 Big  1  4   15 
#6   A 2001 Big  2  5   16 
#7   A 2001 Big  3  6   17 
#8   B 2000 Big  2  7   18 
#9   B 2000 Big  3  8   19 
#10   B 2000 Big  4  NA   NA 
#11   B 2000 Big  5  9   20 
#12   B 2001 Big  3  10   21 
#13   B 2001 Big  4  11   22 
#14   B 2001 Big  5  12   23 
+1

vous fait mon vendredi après-midi la peine de rester un peu en retard. JE VOUS REMERCIE! C'est étrange cependant - dplyr avait une barre de progression pour le code que vous avez écrit, et pas pour le code que j'ai écrit plus tôt cette semaine à http://stackoverflow.com/questions/42725428/how-to-add-progress-bar-inside -dplyr-chain-in-r ... demande pourquoi. – Nova

+0

@JakeKaupp L'OP avait essayé avec 'complete' et cela n'a pas fonctionné – akrun