R语言 开始日期和结束日期之间的每年天数

snz8szmq  于 2023-06-19  发布在  其他
关注(0)|答案(1)|浏览(143)

我无法复制这里找到的代码:
count the number of days between two dates per year
注:根据反馈更新:
我拥有的数据:
| ID|施塔特|恩德特|
| - -----|- -----|- -----|
| 60A| 2018年5月4日|2022年10月1日|
| 60B| 2019年2月4日|2022年12月20日|
| 60C| 2015年8月22日|2020年6月20日|
我想要的数据:所以对于ID:60 A

| ID | 2018 | 2019 |2022
|60A |242|365|9

我在autocopy中遇到错误auto_copy()中的错误:!xy必须共享同一个src。

kg7wmglp

kg7wmglp1#

df = read.table(text = 'ID  Startdt     Enddt
60A     5/4/2018    1/10/2022
60B     2/4/2019    12/20/2022
60C     8/22/2015   6/20/2020', header = T)

library(dplyr)
library(lubridate)
library(purrr)

df %>%
  mutate(
    across(ends_with("dt"), mdy), ## added this line to convert to date class
    date_int = interval(Startdt, Enddt),
         year = map2(year(Startdt), year(Enddt), seq)
  ) %>%
  unnest(year) %>%
  mutate(
    year_int = interval(as.Date(paste0(year, '-01-01')),
      as.Date(paste0(year, '-12-31'))
    ),
    year_sect = intersect(date_int, year_int),
    start_new = as.Date(int_start(year_sect)),
    end_new = as.Date(int_end(year_sect))
  ) %>%
  select(ID, start_new, end_new) %>%
  mutate(
    year = year(start_new),
    days = as.numeric(end_new - start_new) + 1 ## added 1 here as a correction
  ) %>%
  right_join(df, by = "ID") %>%
  pivot_wider(
    id_cols = c(ID, Startdt, Enddt),
    names_from = year, values_from = days,
    names_prefix = "year_", 
    values_fill = list(days = 0)
  ) %>%
  mutate(days_number = rowSums(across(starts_with("year")))) ## updated this line to use `across()`
# # A tibble: 3 × 12
#   ID    Startdt   Enddt      year_2018 year_2019 year_2020 year_2021 year_2022 year_2015 year_2016 year_2017
#   <chr> <chr>     <chr>          <dbl>     <dbl>     <dbl>     <dbl>     <dbl>     <dbl>     <dbl>     <dbl>
# 1 60A   5/4/2018  1/10/2022        242       365       366       365        10         0         0         0
# 2 60B   2/4/2019  12/20/2022         0       331       366       365       354         0         0         0
# 3 60C   8/22/2015 6/20/2020        365       365       172         0         0       132       366       365
# # ℹ 1 more variable: days_number <dbl>

相关问题