我有一个数据集,它提出了一些转换挑战,为创建哑铃图做准备:
- 单一日期组:有些组只有一个日期.在这些情况下,开始日期和结束日期相同,
h_sequ
是1
. - 两个日期组:其他组有明确的开始和结束日期,由
1
和2
的h_sequ
值表示.这方面的一个例子是第12组. - 三个日期组:还有具有三个日期的组,其中
h_sequ
采用值1、2和3,例如组33. - 在组33中,也有一个独特的情况,其中
h_sequ
的值为1, 1, 2, 3
.
group h_sequ date
<int> <int> <date>
1 1 1 2012-03-27
2 1 1 2012-03-27
3 10 1 2016-10-25
4 10 1 2016-10-25
5 12 1 2021-06-25
6 12 2 2022-05-18
7 31 1 2019-11-28
8 31 1 2019-11-28
9 31 2 2021-03-24
10 33 1 2013-09-03
11 33 1 2013-09-03
12 33 2 2019-01-04
13 33 3 2020-07-28
14 35 1 2015-10-21
15 35 2 2017-06-28
data <- structure(list(group = c(1L, 1L, 10L, 10L, 12L, 12L, 31L, 31L,
31L, 33L, 33L, 33L, 33L, 35L, 35L), h_sequ = c(1L, 1L, 1L, 1L,
1L, 2L, 1L, 1L, 2L, 1L, 1L, 2L, 3L, 1L, 2L), date = structure(c(15426,
15426, 17099, 17099, 18803, 19130, 18228, 18228, 18710, 15951,
15951, 17900, 18471, 16729, 17345), class = "Date")), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -15L))
主要问题是如何实现Date列的逻辑,以适应组合哑铃图中的这些场景.到目前为止,我已经使用汇总来获得每个组的最小和最大日期,但我需要将这种方法与我的数据的特定 struct 集成在一起,考虑到每个组的日期数量不同.
到目前为止,我有这样的 idea :
library(ggplot2)
library(ggalt)
library(dplyr)
data %>%
summarise(start_date = min(date), end_date = max(date), .by = group) %>%
ggplot(aes(x = start_date, xend = end_date, y = group)) +
geom_dumbbell(color = "red3", size = 3)