我喜欢将时间序列数据从长格式重塑为宽格式,使用StartTime
和StopTime
等列。在同一时间间隔内(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