【发布时间】:2019-04-25 12:15:15
【问题描述】:
我有一个如下所示的数据集:
group id date1 date2 date3 date4
1 1 1 1991-10-14 1992-05-20 1992-12-09 1993-06-30
2 1 2 <NA> 1992-05-21 1992-12-10 1993-06-29
3 1 3 <NA> <NA> 1992-12-08 1993-06-29
4 1 4 1991-10-14 1992-05-19 <NA> <NA>
5 1 5 1991-10-15 1992-05-21 <NA> 1993-06-30
6 1 6 1991-10-15 <NA> <NA> 1993-06-30
这里的数据是R格式的:
structure(list(group = c(1L, 1L, 1L, 1L, 1L, 1L),
id = 1:6,
date1 = structure(c(7956, NA, NA, 7956, 7957, 7957), class = "Date"),
date2 = structure(c(8175, 8176, NA, 8174, 8176, NA), class = "Date"),
date3 = structure(c(8378, 8379, 8377, NA, NA, NA), class = "Date"),
date4 = structure(c(8581, 8580, 8580, NA, 8581, 8581), class = "Date")),
.Names = c("group", "id", "date1", "date2", "date3", "date4"),
row.names = c(NA, 6L), class = "data.frame")
也就是说,我们有一个分组变量、几个人和四个可能的兴趣日期。
现在我想以此为每个人构建一个线性月时间趋势。换句话说,我尝试在第一个非NA 日期构建一个值为 1 的趋势。之后,其余非NA 期间的趋势是自第一个非NA 日期以来经过的月份。
我的目标是这个结构(个人 1,组 1):
group id period trend
1 1 1 1 1
2 1 1 2 8
3 1 1 3 15
4 1 1 4 21
也就是说,自 t = 1 以来经过几个月的熔融 data.frame。
我玩过这个帖子的想法:Number of months between two dates。但是,我找不到不涉及for-loop 和大量if-statements 的解决方案。
任何帮助表示赞赏!
【问题讨论】:
-
请将数据框的定义包含在问题本身中。
-
我将它包含在问题的底部。