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
| # création d'un jeu de données d'exemple
X <- data.frame(ID = c(1, 1, 1, 2, 3, 3), date = c("21/02/2013", "21/02/2014", "22/02/2014", "21/03/2013", "22/02/2014", "23/02/2014"))
# la variable "date" est passée au format "date" de R pour calculer la différence avec la fonction "diff"
X$date <- as.Date(X$date, format = "%d/%m/%Y")
# la variable "ID" est passée au format "factor" pour servir d'indice dans la fonction "by"
X$ID <- factor(X$ID)
# création d'une fonction "maison" qui permet de faire le "diff" des dates et ajouter en même temps les NA nécessaires
myfun <- function(x)
{
z <- as.numeric(diff(x))
if(length(z)==0)
{
s <- NA
}
else
{
s <- c(NA, z)
}
return(s)
}
# calcul du vecteur de différences comme demandé :
df <- by(X$date, X$ID, myfun)
# résultat :
X <- data.frame(X, diff = unlist(df))
X
ID date diff
1 2013-02-21 NA
1 2014-02-21 365
1 2014-02-22 1
2 2013-03-21 NA
3 2014-02-22 NA
3 2014-02-23 1 |
Partager