扩展行以包括日期范围内的临时年份

问题描述 投票:0回答:1

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

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

我尝试过这里建议的方法:Expand rows by date range using start and end dateGenerate rows between two dates in a dataframe。特别是我跑了:

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-MM-DD格式的全日期也会出现此错误。我对每月或每日差异不感兴趣所以我将这些差异重新格式化为YYYY,但此代码仍然返回错误消息。

有人可以帮忙吗?

r date dplyr data.table
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.