1 pièce(s) jointe(s)
Sélectionner la dernière observation par groupe
Bonjour,
Voici un programme pour sélectionner la dernière observation par groupe (Merci Robert A. Muenchen :) ; je recommande ses livres R for SAS and SPSS users et R for Stata users aux utilisateurs de ces langages).
Je joins un fichier csv pour tester le programme.
Code:
1 2 3 4 5 6
| > df <- read.csv("D:/temp/test.txt")
> df
ID date_envoi date_reception
1 1 15/01/2017 01/02/2017
2 1 01/01/2017 01/02/2017
3 2 01/01/2017 01/02/2017 |
Code:
1 2 3 4 5 6 7 8
| > df$date_envoi <- as.Date(df$date_envoi, format = "%d/%m/%Y")
> df$date_reception <- as.Date(df$date_reception, format = "%d/%m/%Y")
> df$delai = df$date_reception-df$date_envoi
> df
ID date_envoi date_reception delai
1 1 2017-01-15 2017-02-01 17 days
2 1 2017-01-01 2017-02-01 31 days
3 2 2017-01-01 2017-02-01 31 days |
Code:
1 2 3 4 5 6
| > df <- df[order(df$ID, df$date_reception, df$date_envoi),]
> df
ID date_envoi date_reception delai
2 1 2017-01-01 2017-02-01 31 days
1 1 2017-01-15 2017-02-01 17 days
3 2 2017-01-01 2017-02-01 31 days |
Code:
1 2 3 4 5 6
| > myBys <- data.frame(df$ID, df$date_reception)
> myBys
df.ID df.date_reception
1 1 2017-02-01
2 1 2017-02-01
3 2 2017-02-01 |
Code:
1 2 3 4 5 6 7 8 9 10 11
| > mylastList <- by(df, myBys, tail, n=1)
> mylastList
df.ID: 1
df.date_reception: 2017-02-01
ID date_envoi date_reception delai
1 1 2017-01-15 2017-02-01 17 days
------------------------------------------------------------
df.ID: 2
df.date_reception: 2017-02-01
ID date_envoi date_reception delai
3 2 2017-01-01 2017-02-01 31 days |
Code:
1 2 3 4 5
| > df <- do.call(rbind, mylastList)
> df
ID date_envoi date_reception delai
1 1 2017-01-15 2017-02-01 17 days
3 2 2017-01-01 2017-02-01 31 days |
Cordialement,
Sélectionner la dernière observation par groupe
Bonjour,
Dans votre 1er message vous dites :
Citation:
Je souhaiterai supprimer la ligne avec la date d'envoi la plus ancienne lorsque j'ai deux dates de réceptions identiques.
Dans votre fichier texte, c'est en effet l'inverse : vous souhaitez supprimer la ligne avec la date de réception la plus ancienne lorsque vous avez deux dates d'envoi identiques.
Il faut donc trier votre dataframe par ID, date_envoi, date_reception et indiquer que les groupes sont définis par ID, date d'envoi : myBys <- data.frame(df$ID, df$date_envoi).
Cordialement,