如何确定日期范围内的唯一年份?
How to determine unique years within date range?
我正在尝试确定客户在哪几年使用医疗保健服务。数据:
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
对于这个客户,我想知道 he/she 是在哪一年注册的。因此,结果应该是:
2017, 2018, 2019, 2020
以及独特年份的计数:4
.
有没有办法在 Excel 或 R 中做到这一点?
提前致谢。
在R中,我们可以获取长格式的数据,转换为日期并提取年份。对于每个客户端,我们可以创建一个 unique
Year
的逗号分隔值,并计算不同的 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
一个dplyr
和purrr
选项可以是:
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)
我正在尝试确定客户在哪几年使用医疗保健服务。数据:
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
对于这个客户,我想知道 he/she 是在哪一年注册的。因此,结果应该是:
2017, 2018, 2019, 2020
以及独特年份的计数:4
.
有没有办法在 Excel 或 R 中做到这一点?
提前致谢。
在R中,我们可以获取长格式的数据,转换为日期并提取年份。对于每个客户端,我们可以创建一个 unique
Year
的逗号分隔值,并计算不同的 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
一个dplyr
和purrr
选项可以是:
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)