[R] the first. from SAS in R

David Winsemius dwinsemius at comcast.net
Tue Nov 23 17:26:53 CET 2010


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.
>
> 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



More information about the R-help mailing list