我有一个带有日期范围的数据框,我想从中创建代表该范围所涵盖的每年(包括开始和结束年份)的新行。看起来像这样:
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,但是此代码仍返回错误消息。
有人可以帮忙吗?
答案 0 :(得分:1)
样本数据
library(data.table)
DT <- fread("id start end
1 2000 2004
2 2005 2005
3 2005 2007
4 2001 2002")
代码
year
是数字(而不是日期),因此可以通过start
创建从end
到id
的向量。
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