2017-02-22 1 views
-1

J'ai cette (grande) trame de données et je veux ajouter les lignes manquantes (remplies avec 0) par rapport à la colonne nommée "date".Comment ajouter des lignes manquantes (remplies avec des 0) dans un bloc de données en utilisant une colonne comme référence?

Par exemple:

date 0  1   2   3   4   5 
199807 0  546.98  19355.55 1110.6 4720.34 3435.9 
199808 0  1668.85 4398.29 5816.71 599.7  535.28 
199809 608.79 446.68  2297.68 1862.64 415.6  933.46 
199811 0  0   1366.59 1337.01 0   711.59 
199812 0  0   601.8  2079.9 2030.24 368.44 
199901 0  1462.8  0   552.78 0   0 
199903 0  621.2  2242  753.36 0   0 

Et je voudrais ceci:

date 0  1  2   3   4   5 
199807 0  546.98 19355.55  1110.6 4720.34 3435.9 
199808 0  1668.85 4398.29  5816.71 599.7  535.28 
199809 608.79 446.68 2297.68  1862.64 415.6  933.46 
199810 0  0  0   0   0   0 
199811 0  0  1366.59  1337.01 0   711.59 
199812 0  0  601.8  2079.9 2030.24 368.44 
199901 0  1462.8 0   552.78 0   0 
199902 0  0  0   0   0   0 
199903 0  621.2 2242   753.36 0   0 

Merci beaucoup

+0

Je pense que vous avez probablement une rangée de zéros au mauvais endroit; devrait être la ligne 199810? Une façon serait de "fusionner" avec un bloc de données contenant toutes les dates (bien que ce ne soit pas techniquement des dates, mais peu importe) qui donnera des lignes avec 'NA' et ensuite remplacer les valeurs manquantes par 0. – joran

+0

Vous avez raison . Merci, je l'ai déjà édité. –

Répondre

0

Il peut se faire comme suit:

1) Créer une ensemble de données d'espaces réservés avec toutes les dates et les zéros dans toutes les autres colonnes

2) pour les dates, qui sont dans l'ensemble de données d'origine, écrire des valeurs de jeu de données original Espace réservé

# Create a placeholder dataset, including all dates, 0 at all other columns 
df <- data.frame(date = c(199801:199812, 199901:199912), 
       `1` = 0, `2` = 0, `3` = 0, check.names = FALSE) 

# create the dataset with some data (this will be the 'original' dataset) 
df2 <- data.frame(date = c(199807:199809, 199811:199812, 199901:199903), 
        `1` = rnorm(8), `2` = rnorm(8), `3` = rnorm(8), check.names = FALSE) 

# write data from original dataset to placeholder dataset 
df[df$date %in% df2$date,] <- df2