r语言 - 建立一个连续年份的字符链



我有一个包含startYear,endYear的表,我想创建一个维度Year为"startYear,endYear">

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

我不知道如何改变它正常工作。由于

期望的文字输出…

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.tabledplyr原生,也许不太美观的基础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,...

最新更新