On 07/01/2013 8:33 AM, Paolo Donatelli wrote:
Hi all,
I have a very basic doubt -- but still, I am a newby!
My question is about referring to the previous row: in a sample as the
following...
ID X1 X2
1 A 12
2 A 6
3 A 10
1 B 17
2 B 19
1 C 22
1 D 13
2 D 19
3 D 21
... I would like to create a dummy variable equal to 1 whenever the
value of ID of the current row is lower or equal than the value of ID
of the previous row -- check the new vector X3 I'd like to obtain:
ID X1 X2 X3
1 A 12 0
2 A 6 0
3 A 10 0
1 B 17 1
2 B 19 0
1 C 22 1
1 D 13 1
2 D 19 0
3 D 21 0
I have searched a lot without finding a decent and working solution. I
suppose it is just some basic matter of indexing language, something
like
X3<- as.numeric ( ID[n] <= ID[n-1])
but it is not so simple!
Negative indexing lets you leave out an entry, so x[-1] leaves out the
first entry, and x[-length(x)] leaves out the last one. To talk about
previous entries, you need to do something about the fact that the first
row has no previous entry. You gave X3[1] the value 0, suggesting that
you want to implicitly have the "zeroth" row to have the smallest
possible value. So
prevID <- c( -Inf, ID[-length(ID)] )
X3 <- as.numeric( ID <= prevID )
should do what you want.
Duncan Murdoch
______________________________________________
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.