【问题标题】:How to determine unique years within date range? [closed]如何确定日期范围内的唯一年份? [关闭]
【发布时间】:2020-02-19 10:11:26
【问题描述】:

我正在尝试确定客户使用医疗保健的年份。数据:

Clientnumber   Date start  Date end
1              01-03-2017  31-10-2017
1              01-02-2018  07-08-2018
1              01-11-2018  01-03-2019
1              25-03-2019  01-07-2020

对于这个客户,我想知道他/她是在哪些独特的年份注册的。因此,结果应该是: 2017, 2018, 2019, 2020 以及独特年份的计数:4

有没有办法在 Excel 或 R 中做到这一点?

提前致谢。

【问题讨论】:

  • 你试过使用YEAR函数吗?

标签: r excel rstudio


【解决方案1】:

在R中,我们可以获取长格式的数据,转换为日期并提取年份。对于每个客户端,我们可以创建一个逗号分隔的值uniqueYear,并计算不同Year 的数量。

library(dplyr)

df %>%
  tidyr::pivot_longer(cols = -Clientnumber) %>%
  mutate(value = as.Date(value, "%d-%m-%Y"), 
         Year = format(value, "%Y")) %>%
  group_by(Clientnumber) %>%
  summarise(Un_year = toString(unique(Year)), 
            count = n_distinct(Year)) 

# Clientnumber  Un_year                count
#         <int> <chr>                  <int>
#1            1 2017, 2018, 2019, 2020     4

【讨论】:

    【解决方案2】:

    dplyrpurrr 选项可以是:

    df %>%
     group_by(Clientnumber) %>%
     summarise(Years = map_chr(list(c(Date_start, Date_end)), 
                               ~ toString(unique(substr(., 7, 10)))))
    
      Clientnumber Years                 
             <int> <chr>                 
    1            1 2017, 2018, 2019, 2020
    

    如果你还想要计数,加上stringr

    df %>%
     group_by(Clientnumber) %>%
     summarise(Years = map_chr(list(c(Date_start, Date_end)), 
                               ~ toString(unique(substr(., 7, 10)))),
               n = str_count(Years, ",")+1)
    
      Clientnumber Years                      n
             <int> <chr>                  <dbl>
    1            1 2017, 2018, 2019, 2020     4
    

    如果情况稍微复杂一些,这意味着您想要第一年和最后一年之间的所有年份,即使它们不存在于数据中:

    df %>%
     group_by(Clientnumber) %>%
     summarise(Years = map_chr(list(c(Date_start, Date_end)), 
                               ~ toString(reduce(range(as.numeric(substr(., 7, 10))), `:`))),
               n = str_count(Years, ",")+1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多