Я не знаю, насколько это полезно, но в моем случае я просто создал еще один круг с рамкой и поместил его «внутри» другой фигуры.
Что-то вроде этого?
require(dplyr)
df1 %>% group_by(id,program) %>%
mutate(daterange=paste(seq(min.date,max.date),collapse=",")) %>%
separate_rows(daterange,sep=",") %>% select(-min.date,-max.date) %>%
spread(program,days)
mutate
создает строку всех лет в пределах каждого диапазона, разделенных запятой. Затем separate_rows
берет эту строку, разбивает ее на запятые и создает новую строку для каждого значения, которое мы затем можем просто spread
создать, как мне кажется, ваш фактический желаемый формат. Этот последний шаг может быть ненужным, в зависимости от того, как я интерпретирую ваш комментарий выше. Результат:
id daterange `1` `2` `3` `4`
<chr> <chr> <int> <int> <int> <int>
1 one 2000 NA 37 NA NA
2 one 2001 NA 37 NA NA
3 one 2002 NA 37 NA 89
4 one 2003 NA 37 57 89
5 one 2004 NA 37 57 89
6 one 2005 NA 37 57 89
7 one 2006 NA 37 57 89
8 one 2007 NA 37 57 89
9 one 2008 NA 37 57 89
10 one 2009 NA 37 57 89
# ... with 24 more rows