R 有条件地选择数据帧的行

R 有条件地选择数据帧的行,r,dataframe,R,Dataframe,我有以下生存分析的数据框架ID是受试者ID,event是事件是否发生,time是每次观察的时间 test.df<-data.frame(expand.grid(id=c("A","B","C","D","E"),event=c(0,0,1,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1))) test.df$time=round(rnorm(155,5,1),1) 使用以下命令: subset(within(test.df,

我有以下生存分析的数据框架
ID
是受试者ID,
event
是事件是否发生,
time
是每次观察的时间

test.df<-data.frame(expand.grid(id=c("A","B","C","D","E"),event=c(0,0,1,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1)))
test.df$time=round(rnorm(155,5,1),1)
使用以下命令:

subset(within(test.df, {
    cumsum <- ave(event, id, FUN=cumsum)
    lagcumsum <- ave(cumsum, id, FUN=function(x)c(NA,head(x,-1)))
}), cumsum==0 | cumsum==1 & lagcumsum==0)

编辑:如果前一行没有
event==0
,则现在正确删除每个ID中带有
event==1
的第一行

您的测试数据中是否有代表“也”一段中提到的可能性的实例?如果没有,那为什么不呢?德温,我每天都会得到不同的数据帧。在某些情况下,此条件(“也”)可能适用。解决方案应该考虑到这一点,因为碰巧你(几乎)达成的解决方案能够处理这种情况。我只是觉得当构建了不充分的测试用例,然后在旁边添加了一个Oh,这是不正确的。看看我对你答案的回答。Cumsum没有回答我的问题(不是因为语法错误,顺便说一句,很抱歉)
subset(within(test.df, {
    cumsum <- ave(event, id, FUN=cumsum)
    lagcumsum <- ave(cumsum, id, FUN=function(x)c(NA,head(x,-1)))
}), cumsum==0 | cumsum==1 & lagcumsum==0)
    id event time lagcumsum cumsum
107  B     0  3.5        NA      0
112  B     1  3.6         0      1
44   D     0  2.9        NA      0
109  D     0  3.3         0      0
94   D     0  3.7         0      0
144  D     1  4.0         0      1
120  E     0  2.9        NA      0
135  E     0  3.0         0      0
125  E     1  3.6         0      1