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 <thurac...@gmail.com>
To: arun <smartpink...@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 <smartpink...@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 <thurac...@gmail.com>
>To: arun <smartpink...@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 <smartpink...@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 <thurac...@gmail.com>
>>To: smartpink...@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, <smartpink...@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.

Reply via email to