如何为 r 中的每个 id 创建一个包含第一个日期年份的新列

How to creating a new column with year of first date to each id in r

我有这个数据集:

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)

我需要创建一个包含年份的新列,但该 ID 的第一个日期的年份,因为数据来自年底,所以通常同一 ID 的日期在 2 年之间有所不同。

我最初是这样尝试的,但没有用:


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

这是预期的输出:

>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

可能的解决方案:

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

使用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