如何为 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
我有这个数据集:
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