постройте цепочку персонажей с последовательными годами

#r #data.table #seq

Вопрос:

У меня есть таблица с началом года, концом года, и я хочу создать год измерения как «Начало года,конец года».

 dt<- data.table(
startYear=c("1994","1995","2013"),
endYear=c("1995","2000","2021"))
 

Мне нужна следующая таблица dt

 dt<- data.table(
startYear=c("1994","1995","2013"),
endYear=c("1995","2000","2021"),
Year = c("1994,1995","1995,1996,1997,1998,1999,2000","2013,2014,2015,2016,2017,2018,2019,2020,2021")
 

Я стараюсь

 dt$Year<- paste(seq(from = dt$startYear,
                          to = dt$endYear, by = 1))
 

но я получаю сообщение об ошибке

 Error in seq.default(from = test$startYear, to = test$endYear, by = 1) : 
  'from' must be of length 1
 

Я не знаю, как это изменить, чтобы работать должным образом.
Спасибо

Ответ №1:

Буквальный ожидаемый результат …

 dt[, Year := mapply(function(a, b) paste(seq(a, b), collapse = ","), startYear, endYear) ]
#    startYear endYear                                    Year
#       <char>  <char>                                  <char>
# 1:      1994    1995                               1994,1995
# 2:      1995    2000           1995,1996,1997,1998,1999,2000
# 3:      2013    2021 2013,2014,2015,2016,2017,2018,2019,2...
 

Но если вы планируете что-то сделать с числами внутри позже (а не просто свернутую строку), может быть полезно иметь дело со Year столбцом-списком, используемым внутри data.table и dplyr изначально, возможно, менее эстетичным в базе R, но он все еще может работать и там, в зависимости от вашего варианта использования.

 dt[, Year := Map(seq, startYear, endYear) ]
#    startYear endYear                              Year
#       <char>  <char>                            <list>
# 1:      1994    1995                         1994,1995
# 2:      1995    2000     1995,1996,1997,1998,1999,2000
# 3:      2013    2021 2013,2014,2015,2016,2017,2018,...