扩展行以在日期范围内包括过渡年

时间:2019-04-30 16:55:21

标签: r date dplyr data.table

我有一个带有日期范围的数据框,我想从中创建代表该范围所涵盖的每年(包括开始和结束年份)的新行。看起来像这样:

findElementPF

其中“ id”是一个因素,“开始”和“结束”是日期。

但是我需要扩展数据框,使其看起来像这样:

id      start      end  
1      2000         2004  
2      2005         2005  
3      2005         2007  
4      2001         2002 

我已经尝试过此处建议的方法:Expand rows by date range using start and end date和此处Generate rows between two dates in a dataframe。我专门跑了:

id      year        
1       2000 
1       2001
1       2002
1       2003 
1       2004
2       2005
3       2005
3       2006
3       2007
4       2001
4       2002

还尝试了dplyr方法:

library(data.table)
setDT(df)[, .(year = seq.Date(start, end, by = '1 year')), by = 'id']

两次尝试均导致类似的错误:

library(dplyr)
library(purrr)
df_expanded <- df %>%
  transmute(id, year = map2(start, end, seq, by = "year")) %>%
  unnest %>% 
  distinct

我已经看过了,但我不知道为什么会出现此错误。我应该提到,对于格式为YYYY-MM-DD的完整日期,也会发生此错误。我对每月或每天的差异不感兴趣,因此我将其重新格式化为仅YYYY,但是此代码仍返回错误消息。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

样本数据

library(data.table)
DT <- fread("id      start      end  
1      2000         2004  
2      2005         2005  
3      2005         2007  
4      2001         2002")

代码

year是数字(而不是日期),因此可以通过start创建从endid的向量。

DT[, .(year = start:end), by = .(id)][]

输出

#     id year
#  1:  1 2000
#  2:  1 2001
#  3:  1 2002
#  4:  1 2003
#  5:  1 2004
#  6:  2 2005
#  7:  3 2005
#  8:  3 2006
#  9:  3 2007
# 10:  4 2001
# 11:  4 2002