我有一个long df
,看起来像这样:
df <- data.frame(id=as.integer(c(123,123,123,124,124,124,125,125,126,126,126)),
date=as.Date(c("2014-03-12", "2015-05-02", "2015-09-16", "2015-10-24", "2016-12-11", "2017-10-17", "2017-08-06", "2018-01-29", "2015-09-16", "2015-11-12", "2015-12-03")),
event=as.character(c("A", "C", "E", "A", "B", "D", "A", "E", "A", "B", "E")),
order=as.integer(c(1,2,3,1,2,3,1,2,1,2,3)),
diff=as.integer(c(0,416,553,0,414,724,0,176,0,57,78)))
df
id date event order diff
1 123 2014-03-12 A 1 0
2 123 2015-05-02 C 2 416
3 123 2015-09-16 E 3 553
4 124 2015-10-24 A 1 0
5 124 2016-12-11 B 2 414
6 124 2017-10-17 D 3 724
7 125 2017-08-06 A 1 0
8 125 2018-01-29 E 2 176
9 126 2015-09-16 A 1 0
10 126 2015-11-12 B 2 57
11 126 2015-12-03 E 3 78
每个id
将始终具有初始事件A
和最终事件D
或E
(相互排斥).事件B
和C
可能发生,也可能不发生.diff
是每个事件的date
与初始事件A
每id
的date
之间的days
的差值.
我想要得到wide df
,其中每个事件将是column
(例如A_status
),其中0= absent
;1= present
.类似地,每个通信者diff
将是column
(例如A_time
).但是当事件B
或C
不存在时(例如B= 0
或C= 0
),我希望它们的time
填充D_time
或E_time
,无论存在哪一个.
我需要基于D
和E
的values
创建两个columns
:
- A
column
D.E_status
,其中0=D
;1=E
;及 - 将接收(
D
或E
的)记录的任何time
的column
D.E_time
.
这是所需的输出:
id A_status A_time B_status B_time C_status C_time D.E_status D.E_time
123 1 0 0 553 1 416 1 553
124 1 0 1 414 0 724 0 724
125 1 0 0 176 0 176 1 176
126 1 0 1 57 0 78 1 78
考虑到我非常基本的R技能,我真的很感谢你在这方面的帮助.