[R] Help using Cast (Text) Version
David Winsemius
dwinsemius at comcast.net
Sun Jan 17 23:38:46 CET 2010
On Jan 17, 2010, at 4:37 PM, Steve Sidney wrote:
> Well now I am totally baffled !!!!!!!!!!
>
> Using
>
> sum( !is.na(b[,3])) I get the total of all col 3 except those that
> are NA -
> Great solves the first problem
>
> What I can't seem to do is use the same logic to count all the 1's
> in that
> col, which are there before I use the cast with margins.
>
> So it seems to me that somehow is wrong and is the part of my
> understanding that's missing.
>
> My guess is that that before using margins and sum in the cast
> statement the col is a character type and in order for == 1 to work
> I need to convert this to an integer.
Yiu can test your theory with:
sum(as.integer(b[,3]) == 1)
Or you could post some reproducible data using dput ....
--
David.
>
> Hope this helps you to understand the problem.
>
> Regards
> Steve
>
> Your help is much appreciated
> ----- Original Message ----- From: "David Winsemius" <dwinsemius at comcast.net
> >
> To: "Steve Sidney" <sbsidney at mweb.co.za>
> Cc: <r-help at r-project.org>
> Sent: Sunday, January 17, 2010 7:36 PM
> Subject: Re: [R] Help using Cast (Text) Version
>
>
>>
>> On Jan 17, 2010, at 11:56 AM, Steve Sidney wrote:
>>
>>> David
>>>
>>> Thanks, I'll try that......but no what I need is the total (1's) for
>>> each of the rows, labelled 1-6 at the top of each col in the table
>>> provided.
>>
>> Part of my confusion with your request (which remains unaddressed) is
>> what you mean by "valid". The melt-cast operation has turned a
>> bunch of
>> NA's into 0's which are now indistinguishable from the original
>> 0's. So I
>> don't see any way that operating on "b" could tell you the numbers
>> you
>> are asking for. If you were working on the original data, "res", you
>> might have gotten the column-wise "valid" counts of column 2 with
>> something like:
>>
>> sum( !is.na(res[,2]) )
>>
>>>
>>> What I guess I am not sure of is how to identify the col after
>>> the melt
>>> and cast.
>>
>> The cast object represents columns as a list of vectors. The i-th
>> column
>> is b[[i]] which could be further referenced as a vector. So the j-
>> th row
>> entry for the i-th column would be b[[i]][j].
>>
>>
>>>
>>> Steve
>>>
>>> ----- Original Message ----- From: "David Winsemius"
>>> <dwinsemius at comcast.net
>>> >
>>> To: "Steve Sidney" <sbsidney at mweb.co.za>
>>> Cc: <r-help at r-project.org>
>>> Sent: Sunday, January 17, 2010 4:39 PM
>>> Subject: Re: [R] Help using Cast (Text) Version
>>>
>>>
>>>>
>>>> On Jan 17, 2010, at 5:31 AM, Steve Sidney wrote:
>>>>
>>>>> Sorry to repeat the meassage, not sure if the HTML version has
>>>>> been
>>>>> received - Apologies for duplication
>>>>>
>>>>> Dear list
>>>>>
>>>>> I am trying to count the no of occurances in a column of a
>>>>> data frame
>>>>> and there is missing data identifed by NA.
>>>>>
>>>>> I am able to melt and cast the data correctly as well as sum the
>>>>> occurances using margins and sum.
>>>>>
>>>>> Here are the melt and cast commands
>>>>>
>>>>> bw = melt(res, id=c("lab","r"), "pf_zbw")
>>>>> b = cast(bw, lab ~ r, sum, margins = T)
>>>>>
>>>>> Sample Data (before using sum and margins)
>>>>>
>>>>> lab 1 2 3 4 5 6
>>>>> 1 4er66 1 NA 1 0 NA 0
>>>>> 2 4gcyi 0 0 1 0 0 0
>>>>> 3 5d3hh 0 0 0 NA 0 0
>>>>> 4 5d3wt 0 0 0 0 0 0
>>>>> .
>>>>> . lines deleted to save space
>>>>> .
>>>>> 69 v3st5 NA NA 1 NA NA NA
>>>>> 70 a22g5 NA 0 NA NA NA NA
>>>>> 71 b5dd3 NA 0 NA NA NA NA
>>>>> 72 g44d2 NA 0 NA NA NA NA
>>>>>
>>>>> Data after using sum and margins
>>>>>
>>>>> lab 1 2 3 4 5 6 (all)
>>>>> 1 4er66 1 0 1 0 0 0 2
>>>>> 2 4gcyi 0 0 1 0 0 0 1
>>>>> 3 5d3hh 0 0 0 0 0 0 0
>>>>> 4 5d3wt 0 0 0 0 0 0 0
>>>>> 5 6n44r 0 0 0 0 0 0 0
>>>>> .
>>>>> .lines deleted to save space
>>>>> .
>>>>> 70 a22g5 0 0 0 0 0 0 0
>>>>> 71 b5dd3 0 0 0 0 0 0 0
>>>>> 72 g44d2 0 0 0 0 0 0 0
>>>>> 73 (all) 5 2 4 3 5 7 26
>>>>>
>>>>> Uisng length just tells me how many total rows there are.
>>>>
>>>>
>>>>> What I need to do is count how many rows there is valid data,
>>>>> in this
>>>>> case either a one (1) or a zero (0) in b
>>>>
>>>> I'm guessing that you mean to apply that test to the column in b
>>>> labeled "(all)" . If that's the case, then something like
>>>> (obviously
>>>> untested):
>>>>
>>>> sum( b$'(all)' == 1 | b$'(all)' == 0)
>>>>
>>>>
>>>>
>>>>>
>>>>> I have a report to construct for tomorrow Mon so any help would be
>>>>> appreciated
>>>>>
>>>>> Regards
>>>>> Steve
>>>>
>>>> David Winsemius, MD
>>>> Heritage Laboratories
>>>> West Hartford, CT
>>>>
>>>
>>
>> David Winsemius, MD
>> Heritage Laboratories
>> West Hartford, CT
>>
>>
>
David Winsemius, MD
Heritage Laboratories
West Hartford, CT
More information about the R-help
mailing list