1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| df1 <- read.table(header = TRUE, text = "
id_carreau annee facteur valeur
car1 2006 A 22
car1 2006 B 36
car1 2012 A 45
car1 2006 C 12
car2 2012 A 45
car2 2012 C 22")
id_carreau <- unique(df1$id_carreau)
annee <- unique(df1$annee)
df_cross <- tidyr::crossing(id_carreau, annee)
df_cross <- as.data.frame(df_cross)
df_cross
#> id_carreau annee
#> 1 car1 2006
#> 2 car1 2012
#> 3 car2 2006
#> 4 car2 2012
df2 <- reshape2::dcast(df1, id_carreau + annee ~ facteur, value.var = "valeur")
df2 <- merge(df2, df_cross, by = c("id_carreau", "annee"), all = TRUE)
df2
#> id_carreau annee A B C
#> 1 car1 2006 22 36 12
#> 2 car1 2012 45 NA NA
#> 3 car2 2006 NA NA NA
#> 4 car2 2012 45 NA 22
df3 <- reshape2::melt(df2,
id.vars = c("id_carreau", "annee"),
mesure.vars = c("A":"C"),
variable.name = "facteur",
value.name = "valeur")
df3 <- df3[order(df3$id_carreau, df3$annee, df3$facteur),]
row.names(df3) <- 1:nrow(df3)
df3
#> id_carreau annee facteur valeur
#> 1 car1 2006 A 22
#> 2 car1 2006 B 36
#> 3 car1 2006 C 12
#> 4 car1 2012 A 45
#> 5 car1 2012 B NA
#> 6 car1 2012 C NA
#> 7 car2 2006 A NA
#> 8 car2 2006 B NA
#> 9 car2 2006 C NA
#> 10 car2 2012 A 45
#> 11 car2 2012 B NA
#> 12 car2 2012 C 22
# Created on 2020-11-21 by the reprex package (v0.3.0) |
Partager