我在SO上搜索了许多有关条件删除行的QA,但是没有一个适合我的问题。
我有一个data.frame
,其中包含变量x
,y
等的纵向测量值,以及各个时间点time
和几个主题id
。一些主题在某个time
经历了一个事件ev
(表示为1
,否则为0
)。我想将初始的data.frame
减少为:
- 1)所有未经历事件的主题行(好的,那很容易),还要包括
- 2)对于经历了事件的主题,所有在事件之前的行(即所有时间小于该主题事件的时间的行)。
如此,
testdf<-data.frame(id=c(rep("A",4),rep("B",4),rep("C",4) ),
x=c(NA, NA, 1,2, 3, NA, NA, 1, 2, NA,NA, 5),
y=rev(c(NA, NA, 1,2, 3, NA, NA, 1, 2, NA,NA, 5)),
time=c(1,2,3,4,0.1,0.5,10,20,3,2,1,0.5),
ev=c(0,0,0,0,0,1,0,0,0,0,0,1))
会减少至
id x y time ev
1 A NA 5 1.0 0
2 A NA NA 2.0 0
3 A 1 NA 3.0 0
4 A 2 2 4.0 0
5 B 3 1 0.1 0
6 C 2 2 3.0 0
7 C NA 1 2.0 0
8 C NA NA 1.0 0