R 如何在纵向数据帧中指示第一个事件观测并删除其余的事件观测?

R 如何在纵向数据帧中指示第一个事件观测并删除其余的事件观测?,r,dataframe,R,Dataframe,嗨,我有一个数据框,如下所示: id=rep(c(1:3),each=3) status=rep(c(1,0,1),each=3) event=c(0,1,1,0,0,0,1,1,1) cbind(id,status,event) id status event [1,] 1 1 0 [2,] 1 1 1 [3,] 1 1 1 [4,] 2 0 0 [5,] 2

嗨,我有一个数据框,如下所示:

 id=rep(c(1:3),each=3)
 status=rep(c(1,0,1),each=3)
 event=c(0,1,1,0,0,0,1,1,1)
 cbind(id,status,event)
       id status event
  [1,]  1      1     0
  [2,]  1      1     1
  [3,]  1      1     1
  [4,]  2      0     0
  [5,]  2      0     0
  [6,]  2      0     0
  [7,]  3      1     1
  [8,]  3      1     1
  [9,]  3      1     1
我希望保留或指示'event'==1之前的行和'event'==1的第一行,如下所示:

id status event ind
1    1     0     T
1    1     1     T
1    1     1     F
2    0     0     T
2    0     0     T
2    0     0     T
3    1     1     T
3    1     1     F
3    1     1     F

有人有好主意吗?
非常感谢

如果
DF
是输入数据帧,则:

DF$ind <- ave(DF$event == 1, DF$id, FUN = function(x) !cumsum(c(0, head(x, -1))))

这种方法使用plyr按
id
分割data.frame。然后分别处理
event==0
event==1
的情况,然后再合并处理。如果给定的
id
值没有任何
事件==1
行,则包括检查

require(plyr)

SelectRecords <- function( d ) {
  eventIsZero <- which(d$event==0)
  eventIsOne <- which(d$event==1)

  if( length(eventIsOne) >= 1 )
    selectedIndices <- c(eventIsZero, min(eventIsOne, na.rm=T))
  else    
    selectedIndices <- eventIsZero

  return( d[selectedIndices, ] )
}

ddply(ds, .variables="id", .fun=SelectRecords)
require(plyr)
选择记录
> DF
  id status event   ind
1  1      1     0  TRUE
2  1      1     1  TRUE
3  1      1     1 FALSE
4  2      0     0  TRUE
5  2      0     0  TRUE
6  2      0     0  TRUE
7  3      1     1  TRUE
8  3      1     1 FALSE
9  3      1     1 FALSE
require(plyr)

SelectRecords <- function( d ) {
  eventIsZero <- which(d$event==0)
  eventIsOne <- which(d$event==1)

  if( length(eventIsOne) >= 1 )
    selectedIndices <- c(eventIsZero, min(eventIsOne, na.rm=T))
  else    
    selectedIndices <- eventIsZero

  return( d[selectedIndices, ] )
}

ddply(ds, .variables="id", .fun=SelectRecords)