r具有开始和停止时间列的长到宽时间序列数据



我喜欢将时间序列数据从长格式重塑为宽格式,使用StartTimeStopTime等列。在同一时间间隔内(StartTime,StopTime)测量的所有变量在同一行。

例如,如果这是我的数据集

Id      Time     Status     Col1
10      2012     4          2
11      2009     2          5
11      2010     2          5
12      2004     2          2
12      2009     2          3
12      2011     2          1
12      2018     2          3
17      2018     2          3
17      2020     2          1

期待这样的数据集

Id      From   To      Status      Col1
10      2012   2012        4          2
11      2009   2010        2          5

12      2004   2009        2          2
12      2009   2011        2          3
12      2011   2018        2          1
12      2018   2018        2          3

17      2018   2020        2          3
17      2020   2020        2          1

提前感谢您的帮助。

一个选项是在按'Id'分组后创建一个lead

library(dplyr)
df1 %>% 
group_by(Id) %>% mutate(To = if(n() == 1) Time else 
lead(Time, default = last(Time)), .before = Status) %>% 
ungroup %>% 
rename(From = Time) %>%
filter(!is.na(To))

我不明白为什么在id 12中没有2018-2018。

df %>%
group_by(Id)%>%
mutate(From = Time,To = lead(Time, def = last(Time)),.after=Id, Time = NULL)
# A tibble: 9 × 5
# Groups:   Id [4]
Id  From    To Status  Col1
<int> <int> <int>  <int> <int>
1    10  2012  2012      4     2
2    11  2009  2010      2     5
3    11  2010  2010      2     5
4    12  2004  2009      2     2
5    12  2009  2011      2     3
6    12  2011  2018      2     1
7    12  2018  2018      2     3
8    17  2018  2020      2     3
9    17  2020  2020      2     1

最新更新