[prev in list] [next in list] [prev in thread] [next in thread] 

List:       r-help
Subject:    Re: [R] select and do some calculations/manipulations on certain rows based on conditions in R
From:       arun <smartpink111 () yahoo ! com>
Date:       2013-04-30 19:19:43
Message-ID: 1367349583.52096.YahooMailNeo () web142602 ! mail ! bf1 ! yahoo ! com
[Download RAW message or body]



Hi,
Try this:
dat1<-read.table(text="
        ID X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
1   5184    0    0    1    0    0   0   0    0    0    1     0      0      0      0   \
0      0 2   6884    0    0    1    0    0   1   0    0    0    0     0      0      0 \
0      0      0 3   6884    0    0    1    0    0   0   0    0    0    0     0      0 \
0      0      0      0 4   6884    0    0    0    0    0   1   0    0    0    0     0 \
0      0      0      0      0 5  11329   0    0    0    0    0   1   0    0    0    0 \
0      0      0      0      0      0 6  11329   0    0    1    0    0   1   0    0    \
0    0     0      0      0      0      0      0 7  11340   0    0    1    0    0   1  \
0    0    0    0     0      0      0      0      0      0  ",sep="",header=TRUE)

 dat1$y<-unsplit(lapply(split(dat1,dat1$ID),function(x) \
sapply(seq_len(nrow(x)),function(i) \
{x1<-na.omit(x[i:(i+1),]);1*any(colSums(x1[,-1])==2)})),dat1$ID)  dat1
#     ID X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 y
#1  5184  0  0  1  0  0  0  0  0  0  1   0   0   0   0   0   0 0
#2  6884  0  0  1  0  0  1  0  0  0  0   0   0   0   0   0   0 1
#3  6884  0  0  1  0  0  0  0  0  0  0   0   0   0   0   0   0 0
#4  6884  0  0  0  0  0  1  0  0  0  0   0   0   0   0   0   0 0
#5 11329  0  0  0  0  0  1  0  0  0  0   0   0   0   0   0   0 1
#6 11329  0  0  1  0  0  1  0  0  0  0   0   0   0   0   0   0 0
#7 11340  0  0  1  0  0  1  0  0  0  0   0   0   0   0   0   0 0

A.K.
________________________________
From: Thu Pham <thurachel@gmail.com>
To: arun <smartpink111@yahoo.com> 
Sent: Tuesday, April 30, 2013 3:13 PM
Subject: Re: select and do some calculations/manipulations on certain rows based on \
conditions in R



Hi,

The column for y would be 
y

0
1
0
0
1
0
0




On Tue, Apr 30, 2013 at 3:10 PM, arun <smartpink111@yahoo.com> wrote:


> 
> 
> HI,
> Just a doubt:
> Suppose the data is this:
> 
> 
> dat1<-read.table(text="
> ID X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
> 1   5184    0    0    1    0    0   0   0    0    0    1     0      0      0      0 \
> 0      0 2   6884    0    0    1    0    0   1   0    0    0    0     0      0      \
> 0      0      0      0 3   6884    0    0    1    0    0   0   0    0    0    0     \
> 0      0      0      0      0      0 
> 4   6884    0    0    0    0    0   1   0    0    0    0     0      0      0      0 \
> 0      0 5  11329   0    0    0    0    0   1   0    0    0    0     0      0      \
> 0      0      0      0 6  11329   0    0    1    0    0   1   0    0    0    0     \
> 0      0      0      0      0      0 7  11340   0    0    1    0    0   1   0    0  \
> 0    0     0      0      0      0      0      0 ",sep="",header=TRUE)
> 
> 
> Then, could you confirm the y column values for this:
> 
> 
> 
> 
> ________________________________
> From: Thu Pham <thurachel@gmail.com>
> To: arun <smartpink111@yahoo.com>
> Sent: Tuesday, April 30, 2013 2:31 PM
> 
> Subject: Re: select and do some calculations/manipulations on certain rows based on \
> conditions in R 
> 
> 
> Hello,
> 
> Thanks so much for your help. However, I would expect on the second line for ID \
> 6884, y should be 0 because the ID change. 
> 
> For ID 11329, it is shown as I expected: the first observation for Y=1 because one \
> of x's remain 1 going from one observation to the next. Also y=0 for  the last \
> observation of the same ID because no observation follows that. 
> 
> I'm very new to R and I have trouble interpret your code. Perhaps if I understand \
> what you did, I can fix it. 
> P/S: there is only 0 or 1 value for the X's variables
> 
> 
> 
> 
> On Thu, Apr 18, 2013 at 3:09 PM, arun <smartpink111@yahoo.com> wrote:
> 
> Hi,
> > May be this helps (Assuming that there are only '0's and '1's in the dataset)
> > 
> > dat1<-read.table(text="
> > 
> > ID X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
> > 1   5184    0    0    0    0    0   0   0    0    0    1     0      0      0      \
> > 0      0      0 2   6884    0    0    1    0    0   1   0    0    0    0     0    \
> > 0      0      0      0      0 3  11329   0    0    0    0    0   1   0    0    0  \
> > 0     0      0      0      0      0      0 4  11329   0    0    1    0    0   1   \
> > 0    0    0    0     0      0      0      0      0      0 ",sep="",header=TRUE)
> > dat1$y<-sapply(seq_len(nrow(dat1)),function(i) {x1<-na.omit(dat1[i:(i+1),]); \
> > 1*any(colSums(x1[,-1])==2)}) dat1
> > #     ID X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 y
> > #1  5184  0  0  0  0  0  0  0  0  0  1   0   0   0   0   0   0 0
> > #2  6884  0  0  1  0  0  1  0  0  0  0   0   0   0   0   0   0 1
> > #3 11329  0  0  0  0  0  1  0  0  0  0   0   0   0   0   0   0 1
> > #4 11329  0  0  1  0  0  1  0  0  0  0   0   0   0   0   0   0 0
> > A.K.
> > 
> > 
> > 
> > ________________________________
> > From: Thu Pham <thurachel@gmail.com>
> > To: smartpink111@yahoo.com
> > Sent: Thursday, April 18, 2013 2:57 PM
> > Subject: Re: select and do some calculations/manipulations on certain rows based \
> > on conditions in R 
> > 
> > 
> > 
> > Hi,
> > 
> > Thank you for the response. You're absolutely right.
> > 
> > I'm trying to see if any of the X's variable will be repeated for the next \
> > observation pertaining to the same subject(here would be having the same ID). \
> > However, I am only interested if Xi=1 is repeated. 
> > 
> > Therefore, Y=0 if each ID has only one observation, i.e. the very next row will \
> > have a different ID# from the one directly above. 
> > 
> > Y=1 if any of the Xs will take value=1 for two consecutive rows. However at the \
> > very last observation of each same ID, there is no next row to compare the Xs to \
> > so Y is automatically = 0 for that row. 
> > 
> > So in my data I posted Y4=0.
> > 
> > 
> > 
> > I hope this clarify the issues a little more.
> > 
> > 
> > Thanks,
> > T
> > 
> > 
> > 
> > 
> > 
> > On Thu, Apr 18, 2013 at 2:42 PM, <smartpink111@yahoo.com> wrote:
> > 
> > Hi,
> > > Not sure I understand it correctly.
> > > For the 3rd row, you are comparing the 3row and 4th row.  i.e if there is \
> > > anywhere 1 on 3rd row and 1 directly below that cell, then the y value will be \
> > > 1.  What is the use of the sum of products here?  If one value is 0 and other \
> > > is 1, the product should be 0.  Also, by this method, you are comparing 1st row \
> > > against 2nd, 2nd against 3rd, 3rd against 4th.  So, in the last row, even if \
> > > there are all 1's , y should be 0?? 
> > > It would be better if you provide the expected result column of 'y'.
> > > Thanks,
> > > A.K.
> > > 
> > > <quote author='thurachel'>
> > > I have a data set read into R that look like this:
> > > ID X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15
> > > 1   5184    0    0    0    0    0   0   0    0    0    1     0      0      0
> > > 0      0      0
> > > 2   6884    0    0    1    0    0   1   0    0    0    0     0      0      0
> > > 0      0      0
> > > 3  11329   0    0    0    0    0   1   0    0    0    0     0      0      0
> > > 0      0      0
> > > 4  11329   0    0    1    0    0   1   0    0    0    0     0      0      0
> > > 0      0      0
> > > > 
> > > 
> > > I want to create a Y column where Y = 1 if there is an observation for the
> > > same ID right below it and if the Sum of the product of the X's =1 for the
> > > two consecutive observations of the same ID. Y=0 otherwise.
> > > 
> > > So for example,  Y3=1 because Sum(x0_3*x0_4+x1_3*x1_4+...+x15_3*x15_4)=1.
> > > 
> > > Can I create program that can do the calculation for Y conditioning on the
> > > ID (i.e. if the ID changes then Y=0) and second conditioning on the sum of
> > > the product of the X's for two consecutive rows if the ID condition is met,
> > > i.e. ID stays the same?
> > > 
> > > I am fairly new to R and I don't know if there is a straight forward
> > > solution to this.
> > > 
> > > Many thanks for any help/suggestions.
> > > </quote>
> > > Quoted from:
> > > http://r.789695.n4.nabble.com/select-and-do-some-calculations-manipulations-on-certain-rows-based-on-conditions-in-R-tp4664633.html
> > >  
> > > 
> > > _____________________________________
> > > Sent from http://r.789695.n4.nabble.com
> > > 
> > > 
> > 
> 

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic