2 votes

Comment créer une nouvelle colonne avec l'année de la première date pour chaque id dans r

J'ai cet ensemble de données :

library(dplyr)
library(lubridate)

id <- c("A", "A", "B", "B")
date <- ymd_hms(c("2017-12-26 09:01:30", "2018-01-01 09:06:40", "2017-12-30 09:04:50", "2018-02-02 09:01:00"))
df <- tibble(id, date)

J'ai besoin de créer une nouvelle colonne avec l'année, mais l'année de la première date de cet ID, parce que les données sont de la fin de l'année, donc généralement les dates varient entre 2 années pour le même ID.

J'ai essayé comme ça au début mais ça n'a pas marché :

df %>% group_by(id) %>% 
  mutate(year=paste0(year(date) > min(year(date))))

Voici le résultat attendu :

>output
      id          date              year
1     A    2017-12-26 09:01:30      2017
2     A    2018-01-01 09:06:40      2017
2     B    2017-12-30 09:04:50      2017
2     B    2018-02-02 09:01:00      2017

1voto

Paul Smith Points 406

Une solution possible :

library(tidyverse)
library(lubridate)

df %>% 
  group_by(id) %>% 
  mutate(year = first(year(date))) %>% 
  ungroup

#> # A tibble: 4 × 3
#>   id    date                 year
#>   <chr> <dttm>              <dbl>
#> 1 A     2017-12-26 09:01:30  2017
#> 2 A     2018-01-01 09:06:40  2017
#> 3 B     2017-12-30 09:04:50  2017
#> 4 B     2018-02-02 09:01:00  2017

0voto

akrun Points 148302

Utilisation de base R

transform(df, year = format(ave(date, id, FUN = min), '%Y'))
  id                date year
1  A 2017-12-26 09:01:30 2017
2  A 2018-01-01 09:06:40 2017
3  B 2017-12-30 09:04:50 2017
4  B 2018-02-02 09:01:00 2017

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X