[R] the first. from SAS in R

Charles C. Berry cberry at tajo.ucsd.edu
Tue Nov 23 18:35:51 CET 2010


On Tue, 23 Nov 2010, David Winsemius wrote:

> On Nov 23, 2010, at 11:04 AM, Charles C. Berry wrote:
>
>> On Tue, 23 Nov 2010, Dennis Murphy wrote:
>> 
>> > Interesting. Check this out:
>> > 
>> > u <- sample(c(TRUE, FALSE), 10, replace = TRUE)
>> > > u
>> > [1] FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE
>> > > class(u)
>> > [1] "logical"
>> > > u + 0
>> > [1] 0 0 1 0 0 1 0 0 0 0
>> > > 0 + u
>> > [1] 0 0 1 0 0 1 0 0 0 0
>> > 
>> > v <- rpois(10, 3)
>> > > !duplicated(v)
>> > [1]  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE FALSE  TRUE
>> > > class(!duplicated(v))
>> > [1] "logical"
>> > > !duplicated(v) + 0
>> > [1]  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE FALSE  TRUE
>> > > 0 + !duplicated(v)
>> > [1] 1 0 1 1 1 1 0 1 0 1
>> > 
>> > # Now assign !duplicated(v) to an object:
>> > > w <- !duplicated(v)
>> > > class(w)
>> > [1] "logical"
>> > > 0 + w
>> > [1] 1 0 1 1 1 1 0 1 0 1
>> > > w + 0
>> > [1] 1 0 1 1 1 1 0 1 0 1
>> > 
>> > I can see *what* is going on, but what is the reason for it? I see 
>> > another
>> > notebook entry coming :)
>> 
>> See
>>
>>  ?Arithmetic
>> 
>> and read the paragraph under Details starting 'Logical vectors'
>
> Chuck;
>
> Compare these three, all of which are using binary operators on logical 
> vectors which is what is being discussed in ?Arithmetic:
>
>>  duplicated(c("a", "a", "b") ) + 0
> [1] 0 1 0
>>  !duplicated(c("a", "a", "b") ) + 0
> [1]  TRUE FALSE  TRUE
>>  0 + !duplicated(c("a", "a", "b") )
> [1] 1 0 1
>
> I believe the proper place to go is ?Syntax where operator precedence is 
> discussed. I think the precendence rules implicitly do this in the second 
> instance, because "+" has higher precendence than negation:
>
> ! ( duplicated(c("a", "a", "b") ) + 0 )

David,

Thanks.

Both you and David Lorenz are correct in pointing to operator precedence 
as the answer to Dennis' question.

Mea culpa for my not reading Dennis' question carefully enough to 
understand what his question really was!

Best,

Chuck

>
> -- 
> David.
>> 
>> Chuck
>> 
>> > 
>> > Dennis
>> > 
>> > On Tue, Nov 23, 2010 at 6:12 AM, David Winsemius 
>> > <dwinsemius at comcast.net>wrote:
>> > 
>> > > 
>> > > On Nov 23, 2010, at 8:33 AM, Joel wrote:
>> > > 
>> > > 
>> > > > Is there any similar function in R to the first. in SAS?
>> > > > 
>> > > > What it dose is:
>> > > > 
>> > > > Lets say we have this table:
>> > > > 
>> > > > a b  c
>> > > > 1 1  5
>> > > > 1 0  2
>> > > > 2 0  2
>> > > > 2 0 NA
>> > > > 2 9  2
>> > > > 3 1  3
>> > > > 
>> > > > 
>> > > > and then I want do to do one thing the first time the number 1 appers 
>> > > > in a
>> > > > and something else the secund time 1 appers in a and so on.
>> > > > 
>> > > > so
>> > > > 
>> > > > something similar to:
>> > > > 
>> > > > if first.a {
>> > > > a$d<-1
>>>>> }else{
>> > > > a$d<-0
>>>>> }
>> > > > 
>> > > > 
>> > > The duplicated function which returns a logical vector with those 
>> > > features
>> > > can easily be coerced to numeric.
>> > > 
>> > > df$d <- as.numeric(!duplicated(df$a))
>> > > 
>> > > 
>> > > I was a bit puzzled about my failure to get coercion by the method 
>> > > which I
>> > > thought was supposed to work, namely adding 0.
>> > > 
>> > > df$e <- !duplicated(df$a)+0  # does not coerce
>> > > 
>> > > df$e <- 0 + !duplicated(df$a) # pre-adding 0 does coerce
>> > > 
>> > > Maybe the rules on coercion were amended.
>> > > 
>> > > --
>> > > David
>> > > 
>> > > 
>> > > This would give me
>> > > > 
>> > > > a b  c b
>> > > > 1 1  5 1
>> > > > 1 0  2 0
>> > > > 2 0  2 1
>> > > > 2 0 NA 0
>> > > > 2 9  2 0
>> > > > 3 1  3 1
>> > > > 
>> > > > Is there such a function in R or anything similar?
>> > > > 
>> > > > 
>> > > > thx
>> > > > 
>> > > > //Joel
>> > > > 
>> > > > --
>> > > > View this message in context:
>> > > > http://r.789695.n4.nabble.com/the-first-from-SAS-in-R-tp3055417p3055417.html
>> > > > Sent from the R help mailing list archive at Nabble.com.
>> > > > 
>> > > > ______________________________________________
>> > > > R-help at 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.
>> > > > 
>> > > 
>> > > David Winsemius, MD
>> > > West Hartford, CT
>> > > 
>> > > 
>> > > ______________________________________________
>> > > R-help at 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.
>> > > 
>> > 
>> >  [[alternative HTML version deleted]]
>> > 
>> > ______________________________________________
>> > R-help at 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.
>> > 
>> 
>> Charles C. Berry                            Dept of Family/Preventive 
>> Medicine
>> cberry at tajo.ucsd.edu			    UC San Diego
>> http://famprevmed.ucsd.edu/faculty/cberry/  La Jolla, San Diego 92093-0901
>> 
>> 
>
> David Winsemius, MD
> West Hartford, CT
>
>

Charles C. Berry                            Dept of Family/Preventive Medicine
cberry at tajo.ucsd.edu			    UC San Diego
http://famprevmed.ucsd.edu/faculty/cberry/  La Jolla, San Diego 92093-0901



More information about the R-help mailing list