Trouver le max de date dans une seule colonne sur plusieurs lignes
J'ai les données suivantes cadre:
id <- c(1,1,2,3,3)
date <- c("23-01-08","01-11-07","30-11-07","17-12-07","12-12-08")
df <- data.frame(id,date)
df$date2 <- as.Date(as.character(df$date), format = "%d-%m-%y")
id date date2
1 23-01-08 2008-01-23
1 01-11-07 2007-11-01
2 30-11-07 2007-11-30
3 17-12-07 2007-12-17
3 12-12-08 2008-12-12
maintenant, j'ai besoin de créer une quatrième colonne et de l'insérer maximum de la date de la transaction pour chaque id
.
la table finale devrait être comme suit:
id date date2 max
1 23-01-08 2008-01-23 2008-01-23
1 01-11-07 2007-11-01 0
2 30-11-07 2007-11-30 2007-11-30
3 17-12-07 2007-12-17 0
3 12-12-08 2008-12-12 2008-12-12
Je vous serais reconnaissant si vous pouviez m'aider avec cela.
OriginalL'auteur AliCivil | 2012-08-26
Vous devez vous connecter pour publier un commentaire.
Edit: Puisque vous voulez la dernière colonne pour être "vide" lorsque la date ne correspond pas au max de la date, vous pouvez essayer la prochaine ligne.
Bien sûr, il est toujours agréable de nettoyer la colnames, etc., mais je laisse cela pour vous.
OriginalL'auteur seandavi
Une autre approche consiste à utiliser la
plyr
package:Maintenant, ce n'est pas dans le format qui vous ont été après, comme il ne montre que chaque
id
une fois. N'ayez pas peur, nous pouvons utilisertransform
au lieu desummarize
:Comme dans @seandavi réponse, il répète la
max
date pour chaqueid
. Si vous souhaitez modifier les doublons deNA
, quelque chose comme cela devrait faire l'affaire:OriginalL'auteur seancarmody
Ajoutant
dplyr
solution au cas où quelqu'un est à la recherche:Résultat:
OriginalL'auteur avid_useR
OriginalL'auteur shhhhimhuntingrabbits
Vous ne pouvez pas utiliser 0 comme valeur de Date, de sorte que vous aurez besoin d'abandonner le garder comme une Date ou d'accepter un NA de valeur:
La
ifelse
machines fait un peu étrange type de vérification que les défaites en utilisant simplementx
comme deuxième argument ci-dessus, mais renvoie toujours la Date de la classe vector. Allez comprendre! Ci-dessous est le caractère de vecteur option.OriginalL'auteur 42-
J'ai trouvé cela pour de l'aide lorsque je veux voir le min/max de la date d'une colonne
Max:
head(df %>% distinct(date) %>% arrange(desc(date)))
Min:
head(df %>% distinct(date) %>% arrange(date))
Le max de tri de la colonne de date dans l'ordre décroissant, vous permettant de voir le max. Le min trier dans l'ordre croissant, vous permettant de voir la min.
Vous devez utiliser le
dplyr
paquet pour cette.OriginalL'auteur grantog