我有以下示例数据框 . 数据采用长格式(纵向数据) . col1表示人员ID(对于此示例,我们只有2人) . col2表示生命事件的发生(例如0 =未结婚,1 =结婚) . 状态从0变为1实际上标志着生命事件 . 事件发生后每个测量时刻col3为1,事件前每个测量时刻为0 . 年份表示评估年份 . 月份表示评估月份(02 = 2月) .
col1 col2 col3 year month
row.name11 A 0 0 2013 02
row.name12 A 0 0 2014 02
row.name13 A 1 1 2015 02
row.name14 A 0 1 2016 02
row.name15 A 0 1 2018 02
row.name16 B 0 0 2014 02
row.name17 B 0 0 2015 02
row.name18 B 1 1 2016 02
row.name19 B 0 1 2017 04
我现在希望创建一个以事件为中心的时间表 . 事件发生时,新变量应为0(col2 == 1) . 它应该在事件之前为负(表示事件发生前的月份),在事件之后为正(表示事件发生后的月份) .
它应该看起来像这样(参见event.time变量):
col1 col2 col3 year month event.time
row.name11 A 0 0 2013 02 -24
row.name12 A 0 0 2014 02 -12
row.name13 A 1 1 2015 02 0
row.name14 A 0 1 2016 02 12
row.name15 A 0 1 2018 02 36
row.name16 B 0 0 2014 02 -24
row.name17 B 0 0 2015 02 -12
row.name18 B 1 1 2016 02 0
row.name19 B 0 1 2017 04 14
我发现我应该首先将年份和月份变量转换为日期变量(使用as.date函数) . 但是,我没有成功 . 之后如何有效地计算event.time变量?也许使用col3,因为这个变量表明它是在事件之前还是之后?
我很高兴收到您的任何建议!提前致谢 :)
2 回答
数据
这是一个使用
lubridate
的选项样本数据