【发布时间】:2018-12-02 11:18:56
【问题描述】:
我是 R 和一般编码的相对新用户,我已经搜索但无法解决这个问题。我有以下数据:
groupid start.date end.date Status
1 2014-01-01 2017-01-01 A
1 2018-01-01 2020-01-01 D
2 2014-01-01 2017-01-01 B
如何生成一个数据框,其中每个观察都是一年,而不是 groupid 和时间段的组合。
我正在寻找的输出是:
groupid year status
1 2014 A
1 2015 A
1 2016 A
1 2017 A
1 2018 D
1 2019 D
1 2020 D
2 2014 B
2 2015 B
2 2016 B
2 2017 B
我尝试了很多方法,但我认为我最好的尝试是:
df <- df %>%
group_by(rn=row_number()) %>%
mutate(d = list(seq(start.date, end.date, by='1 year')))
%>%
unnest()
但我得到了
Error: Each column must either be a list of vectors or a list of data frames
[d]
搜索错误并没有帮助我更接近找出问题所在。 Start.date 和 end.date 存储为日期。如果重要的话,它们是从两个只有四位数年份数字的列向量生成的,所以我应用以下代码将它们更改为可用的日期格式:
df$start.date <- as.Date(ISOdate(df$from, 1, 1))
df$end.date <- as.Date(ISOdate(df$to, 1, 1))
【问题讨论】: