【发布时间】:2019-04-30 16:55:20
【问题描述】:
我有一个包含日期范围的数据框,我想从中创建新的行来表示该范围所包含的每一年(包括开始和结束年份)。它看起来像这样:
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 date 和这里Generate 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