У меня есть фрейм данных с диапазонами дат, из которого я хотел бы создать новые строки, представляющие каждый год, охватываемый этим диапазоном (включая начальный и конечный год). Это выглядит так:
id start end
1 2000 2004
2 2005 2005
3 2005 2007
4 2001 2002
Где «id» - это фактор, «start» и «end» - даты.
Но мне нужно расширить фрейм данных, чтобы он выглядел так:
id year
1 2000
1 2001
1 2002
1 2003
1 2004
2 2005
3 2005
3 2006
3 2007
4 2001
4 2002
Я попробовал подходы, предложенные здесь: Расширение строк по диапазону дат с использованием начальной и конечной даты и здесь Создание строк между двумя датами в кадре данных . Конкретно я побежал:
library(data.table)
setDT(df)[, .(year = seq.Date(start, end, by = '1 year')), by = 'id']
А также попробовал подход dplyr:
library(dplyr)
library(purrr)
df_expanded <- df %>%
transmute(id, year = map2(start, end, seq, by = "year")) %>%
unnest %>%
distinct
Обе попытки привели к схожей ошибке:
Error in seq.int(r1$year, to0$year, by) : wrong sign in 'by' argument
Я посмотрел, но не могу понять, почему я получаю эту ошибку. Следует отметить, что эта ошибка также происходит с полными датами в формате ГГГГ-ММ-ДД. Меня не интересуют месячные или дневные различия, поэтому я переформатировал их только в формате YYYY, но этот код все еще возвращает сообщение об ошибке.
Может кто-нибудь помочь, пожалуйста?