[RESOLU] Supprimer lignes précédent une date pour chaque groupe

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Theo Boudard
Messages : 19
Enregistré le : 06 Jan 2021, 15:32

[RESOLU] Supprimer lignes précédent une date pour chaque groupe

Messagepar Theo Boudard » 10 Sep 2021, 09:13

Bonjour,
J'essaye maintenant depuis plusieurs jours de supprimer des lignes dans mon df qui précèdent une date. Mon df se compose de sous-groupe défini par un ID unique, chaque sous-groupe possède une date "max" (date_test), j'aimerai pour chaque groupe supprimer les lignes qui précèdent cette date. J'ai donc essayé d'utiliser la fonction group_by() et les fonction subset()/filter() sans succès. Sauriez-vous m'aiguiller ? Je vous met ci dessous mon df si ça peut vous aider a visualiser mon problème.

Merci,

Théo

Code : Tout sélectionner

DF <- structure(list(Date_TU = structure(c(1510497840, 1510497960,
                                           1510498080, 1510498200, 1510498320, 1510498440, 1510498560, 1510498680,
                                           1510498800, 1510498920, 1510499040, 1510499160, 1510499280, 1510499400,
                                           1510499520, 1510499640, 1510499760, 1510499880, 1510500000, 1510500120,
                                           1510500240, 1510500360, 1510500480, 1510500600, 1510500720, 1510500840,
                                           1510500960, 1510501080, 1510501200, 1510501320, 1510501440, 1510501560,
                                           1510501680, 1510501800, 1510501920, 1510502040, 1510502160, 1510502280,
                                           1510502400, 1510502520, 1510502640, 1510502760, 1510502880, 1510503000,
                                           1510503120, 1510503240, 1510503360, 1510503480, 1510503600, 1510503720,
                                           1510503840, 1510503960, 1510504080, 1510504200, 1510504320, 1510504440,
                                           1510504560, 1510504680, 1510504800, 1510504920, 1510505040, 1510505160,
                                           1510505280, 1510505400, 1510505520, 1510505640, 1510505760, 1510505880,
                                           1510506000, 1510506120, 1510506240, 1510506360, 1510506480, 1510506600,
                                           1510506720, 1510506840, 1510506960, 1510507080, 1510507200, 1510507320,
                                           1510507440, 1510507560, 1510507680, 1510507800, 1510507920, 1510508040,
                                           1510508160, 1510508280, 1510508400, 1510508520, 1510508640, 1510508760,
                                           1510508880, 1510509000, 1510509120, 1510509240, 1510509360, 1510509480,
                                           1510509600, 1510509720, 1510509840, 1510509960, 1510510080, 1510510200,
                                           1510510320, 1510510440, 1510510560, 1510510680, 1510510800, 1510510920,
                                           1510511040, 1510511160, 1510511280, 1510511400, 1510511520, 1510511640,
                                           1510511760, 1510511880, 1510512000, 1510512120, 1510512240, 1510512360,
                                           1510512480, 1510512600, 1510512720, 1510512840, 1510512960, 1510513080,
                                           1510513200, 1510513320, 1510513440, 1510513560, 1510513680, 1510513800,
                                           1510513920, 1510514040, 1510514160, 1510514280, 1510514400, 1510514520,
                                           1510514640, 1510514760, 1510514880, 1510515000, 1510515120, 1510515240,
                                           1510515360, 1510515480, 1510515600, 1510515720, 1510515840, 1510515960,
                                           1510516080, 1510516200, 1510516320, 1510516440, 1510516560, 1510516680,
                                           1510516800, 1510516920, 1510517040, 1510517160, 1510517280, 1510517400,
                                           1510517520, 1510517640, 1510517760, 1510517880, 1510518000, 1510518120,
                                           1510518240, 1510518360, 1510518480, 1510518600, 1510518720, 1510518840,
                                           1510518960, 1510519080, 1510519200, 1510519320, 1510519440, 1510519560,
                                           1510519680, 1510519800, 1510519920, 1510520040, 1510520160, 1510520280,
                                           1510520400, 1510520520, 1510520640, 1510520760, 1510520880, 1510521000,
                                           1510521120, 1510521240, 1510521360, 1510521480, 1510521600, 1510521720,
                                           1510521840, 1510521960, 1510522080, 1510522200, 1510522320, 1510522440,
                                           1510522560, 1510522680, 1510522800, 1510522920, 1510523040, 1510523160,
                                           1510523280, 1510523400, 1510523520, 1510523640, 1510523760, 1510523880,
                                           1510524000, 1510524120, 1510524240, 1510524360, 1510524480, 1510524600,
                                           1510524720, 1510524840, 1510524960, 1510525080, 1510525200, 1510525320,
                                           1510525440, 1510525560, 1510525680, 1510525800, 1510525920, 1510526040,
                                           1510526160, 1510526280, 1510526400, 1510526520, 1510526640, 1510526760,
                                           1510526880, 1510527000, 1510527120, 1510527240, 1510527360, 1510527480,
                                           1510527600, 1510527720, 1510527840, 1510527960, 1510528080, 1510528200,
                                           1510528320, 1510528440, 1510528560, 1510528680, 1510528800, 1510528920,
                                           1510529040, 1510529160, 1510529280, 1510529400, 1510529520, 1510529640,
                                           1510529760, 1510529880, 1510530000, 1510530120, 1510530240, 1510530360,
                                           1510530480, 1510530600, 1510530720, 1510530840, 1510530960, 1510531080,
                                           1510531200, 1510531320, 1510531440, 1510531560, 1510531680, 1510531800,
                                           1510531920, 1510532040, 1510532160, 1510532280, 1510532400, 1510532520,
                                           1510532640, 1510532760, 1510532880, 1510533000, 1510533120, 1510533240,
                                           1510533360, 1510533480, 1510533600, 1510533720, 1510533840, 1510533960,
                                           1510534080, 1510534200, 1510534320, 1510534440, 1510534560, 1510534680,
                                           1510534800, 1510534920, 1510535040, 1510535160, 1510535280, 1510535400,
                                           1510535520, 1510535640, 1510535760, 1510535880, 1510536000, 1510536120,
                                           1510536240, 1510536360, 1510536480, 1510536600, 1510536720, 1510536840,
                                           1510536960, 1510537080, 1510537200, 1510537320, 1510537440, 1510537560,
                                           1510537680, 1510537800, 1510537920, 1510538040, 1510538160, 1510538280,
                                           1510538400, 1510538520, 1510538640, 1510538760, 1510538880, 1510539000,
                                           1510539120, 1510539240, 1510539360, 1510539480, 1510539600, 1510539720,
                                           1510539840, 1510539960, 1510540080, 1510540200, 1510540320, 1510540440,
                                           1510540560, 1510540680, 1510540800, 1510540920, 1510541040, 1510541160,
                                           1510541280, 1510541400, 1510541520, 1510541640, 1510541760, 1510541880,
                                           1510542000, 1510542120, 1510542240, 1510542360, 1510542480, 1510542600,
                                           1510542720, 1510542840, 1510542960, 1510543080, 1510543200, 1510543320,
                                           1510543440, 1510543560, 1510543680, 1510543800, 1510543920, 1510544040,
                                           1510544160, 1510544280, 1510544400, 1510544520, 1510544640, 1510544760,
                                           1510544880, 1510545000, 1510545120, 1510545240, 1510545360, 1510545480,
                                           1510545600, 1510545720), class = c("POSIXct", "POSIXt"), tzone = ""),
                     id_pluie = c(101L, 101L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
                                  102L, 102L), date_test = structure(c(1510431840, 1510431840,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720, 1510605720, 1510605720,
                                                                       1510605720, 1510605720, 1510605720), class = c("POSIXct",
                                                                                                                      "POSIXt"), tzone = "")), row.names = 13662:14061, class = "data.frame")

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Supprimer lignes précédent une date pour chaque groupe

Messagepar Mickael Canouil » 10 Sep 2021, 10:05

Bonjour,

une solution avec {dplyr} :

Code : Tout sélectionner

library("dplyr")
DF |> 
  
group_by(id_pluie) |> 
  
filter(Date_TU date_test) |> 
  
ungroup()
#> # A tibble: 2 x 3
#>   Date_TU             id_pluie date_test          
#>   <dttm>                 <int> <dttm>             
#> 1 2017-11-12 15:44:00      101 2017-11-11 21:24:00
#> 2 2017-11-12 15:46:00      101 2017-11-11 21:24:00 


Avec {data.table} :

Code : Tout sélectionner

library("data.table")
setDT(DF)[
  
= .SD[Date_TU date_test],
  
by "id_pluie"
]
#>    id_pluie             Date_TU           date_test
#> 1:      101 2017-11-12 15:44:00 2017-11-11 21:24:00
#> 2:      101 2017-11-12 15:46:00 2017-11-11 21:24:00 


A noter que dans le cas présent, c'est-à-dire avec "date_test" défini pour toutes les lignes et donc groupes, le "par groupe" ne sert absolument à rien.

Code : Tout sélectionner

DF[DF$Date_TU DF$date_test, ]
#>               Date_TU id_pluie           date_test
#> 1 2017-11-12 15:44:00      101 2017-11-11 21:24:00
#> 2 2017-11-12 15:46:00      101 2017-11-11 21:24:00 

Code : Tout sélectionner

subset(DFDate_TU date_test)
#>               Date_TU id_pluie           date_test
#> 1 2017-11-12 15:44:00      101 2017-11-11 21:24:00
#> 2 2017-11-12 15:46:00      101 2017-11-11 21:24:00 

Code : Tout sélectionner

dplyr::filter(DFDate_TU date_test)
#>               Date_TU id_pluie           date_test
#> 1 2017-11-12 15:44:00      101 2017-11-11 21:24:00
#> 2 2017-11-12 15:46:00      101 2017-11-11 21:24:00 



Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr

Theo Boudard
Messages : 19
Enregistré le : 06 Jan 2021, 15:32

Re: Supprimer lignes précédent une date pour chaque groupe

Messagepar Theo Boudard » 13 Sep 2021, 07:19

Bonjour,
Merci beaucoup pour cette solution. Encore une fois cela parait si simple une fois sous les yeux mais pourtant ...
Bonne semaine,
Cordialement,


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité