[R] choose the lines

arun smartpink111 at yahoo.com
Mon May 27 21:52:17 CEST 2013



Hi,
Try this:
dat1<- read.csv("dat7.csv",header=TRUE,stringsAsFactors=FALSE,sep="\t")
dat.bru<- dat1[!is.na(dat1$evnmt_brutal),]

fun1<- function(dat){    
      lst1<- split(dat,dat$patient_id)
    lst2<- lapply(lst1,function(x) x[cumsum(x$evnmt_brutal==0)>0,])
    lst3<- lapply(lst2,function(x) x[!(all(x$evnmt_brutal==1)|all(x$evnmt_brutal==0)),])
    lst4<-lapply(lst3,function(x) {vect.brutal=c()
                for(line in which(x$evnmt_brutal==1)){
                   if(x$evnmt_brutal[line-1]==0){
                  vect.brutal=c(vect.brutal,line)
                    }
                       }
                  vect.brutal1<- sort(c(vect.brutal,vect.brutal-1))
                 x[vect.brutal1,]
                       }
                       )
    res<- do.call(rbind,lst4)
    row.names(res)<- 1:nrow(res)
    res
    }


fun1(dat.bru)head(fun1(dat.bru),10)
#    X patient_id number responsed_at  t basdai_d evnmt_brutal
#1  14          2     13   2011-08-07 13    0.900            0
#2  15          2     14   2011-09-11 14   -0.800            1
#3  22          3      2   2010-06-29  1   -0.800            0
#4  23          3      3   2010-08-05  2    0.000            1
#5  24          3      4   2010-09-05  3    1.200            0
#6  25          3      5   2010-10-13  4    1.925            1
#7  26          3      6   2010-11-15  5   -2.525            0
#8  27          3      7   2010-12-18  6   -0.200            1
#9  53          5      9   2011-02-13  8    0.000            0
#10 54          5     10   2011-03-19  9   -1.200            1


A.K.
_______________________________
From: GUANGUAN LUO <guanguanluo at gmail.com>
To: arun <smartpink111 at yahoo.com> 
Sent: Monday, May 27, 2013 8:48 AM
Subject: choose the lines



Hello, Arun,

in this data, i want to choose every line with the variable " evnmt_brutal"==1 & the precedent line( line-1) with "evnmt_brutal"==0, 
i had done this, 

res.bru <- dat7[!is.na(dat7$evnmt_brutal),]
vect.brutal=c()
for(line in which(res.bru$evnmt_brutal==1)){
  if(res.r$evnmt_brutal[line-1]==0){
    vect.brutal=c(vect.brutal,line)}
}
vect.brutal

but now i think it's not correct. Because if there are the situations just like this
Patient_id      evnmt_brutal
1                      ...
1                      ...
1                      0
2                      1
2                      ...
2                      ...

I would have chosen the lines of two different patients, so that is not correct.
Do you know how can i change a little and get the correct lines just for each patient?

Thank you so much.

GG



More information about the R-help mailing list