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