[R] trouble converting an array to a dataframe

Christopher W. Ryan cryan at binghamton.edu
Thu Jan 22 16:09:29 CET 2009


I probably did not explain my data clearly. I am starting with a
dataframe with three columns:

redlognumb     radiologist    barrtotal

where the entries in the variable radiologist are either 1 or 2,
indicating which radiologist generated that barrtotal. All subjects had
their X-ray read independently by both radiologists. So there are two
rows for each subject.

I want to convert it to this structure:

redlognumb    radiologist.1.barrtotal    radiologist.2.barrtotal

in which there is only one row for each subject.

At any rate, in the meantime, I think I figured out that I was "melting"
improperly, and I think I've got it now.  Thanks.

--Chris
Christopher W. Ryan, MD
SUNY Upstate Medical University Clinical Campus at Binghamton
40 Arch Street, Johnson City, NY  13790
cryanatbinghamtondotedu
PGP public keys available at http://home.stny.rr.com/ryancw/

"If you want to build a ship, don't drum up the men to gather wood,
divide the work and give orders. Instead, teach them to yearn for the
vast and endless sea."  [Antoine de St. Exupery]

hadley wickham wrote:
> On Tue, Jan 20, 2009 at 11:10 PM, Christopher W. Ryan
> <cryan at binghamton.edu> wrote:
>> I start with a dataframe called xrays. It contains scores on films from
>> each of two radiologists. It is in "long" format. I used the reshape
>> package to melt a data frame and then cast it into "wide" format, one
>> line for each patient (identified by redlognumb) with scores from both
>> radiologists for a given patient on the same line.
>>
>> I named the result of the casting xrays.data. It is an array. I'd like
>> it to be a three-variable dataframe, with one column for scores from
>> each of two radiologists, and one column for redlognumb (because I will
>> then need to merge it with another dataframe that has a column named
>> redlognumb.) As you can see below, the data.frame() function turns
>> xrays.data into a two-variable dataframe. How can I get three columns
>> (or variables) into my final dataframe?
> 
> It sounds to me like this final data frame would just be equivalent to
> your initial unmolten data.  What's the difference?
> 
> Hadley
> 
> PS. The melt function takes an na.rm argument that will remove any
> missing values.
> 
>> Thanks.
>>
>>
>>> head(xrays)
>>  redlognumb radiologis barrtotal
>> 1          3          2        13
>> 2          4          2        16
>> 3          5          2        10
>> 4          6          2        11
>> 5          9          2        NA
>> 6         10          2        NA
>>
>>> melted.xrays <- melt(xrays, id=c("redlognumb","radiologis"))
>>>
>>> head(melted.xrays <- na.omit(melt(xrays,
>> id=c("redlognumb","radiologis"))))
>>
>>  redlognumb radiologis  variable value
>> 1          3          2 barrtotal    13
>> 2          4          2 barrtotal    16
>> 3          5          2 barrtotal    10
>> 4          6          2 barrtotal    11
>> 7          1          1 barrtotal    11
>> 8          2          1 barrtotal     2
>>> cast(melted.xrays.2, redlognumb~radiologis~variable)
>>          radiologis
>> redlognumb  1  2
>>        1  11 NA
>>        2   2 NA
>>        3  12 13
>>        4  16 16
>>        5  12 10
>>       . .  . cut off for brevity . . .
>>
>>> str(xrays.data)
>>  int [1:42, 1:2, 1] 11 2 12 16 12 13 18 8 19 14 ...
>>  - attr(*, "dimnames")=List of 3
>>  ..$ redlognumb: Named chr [1:42] "1" "2" "3" "4" ...
>>  .. ..- attr(*, "names")= chr [1:42] "1" "2" "3" "5" ...
>>  ..$ radiologis: Named chr [1:2] "1" "2"
>>  .. ..- attr(*, "names")= chr [1:2] "1" "80"
>>  ..$ variable  : Named chr "barrtotal"
>>  .. ..- attr(*, "names")= chr "1"
>>> data.frame(xrays.data)
>>   X1.barrtotal X2.barrtotal
>> 1            11           NA
>> 2             2           NA
>> 3            12           13
>> 4            16           16
>> 5            12           10
>> 6            13           11
>> 7            18           NA
>> 8             8           NA
>> . . . . cut off for brevity . . .
>>
>>
>> --
>> Christopher W. Ryan, MD
>> SUNY Upstate Medical University Clinical Campus at Binghamton
>> 40 Arch Street, Johnson City, NY  13790
>> cryanatbinghamtondotedu
>> PGP public keys available at http://home.stny.rr.com/ryancw/
>>
>> "If you want to build a ship, don't drum up the men to gather wood,
>> divide the work and give orders. Instead, teach them to yearn for the
>> vast and endless sea."  [Antoine de St. Exupery]
>>
>> ______________________________________________
>> 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.
>>
> 
> 
>



More information about the R-help mailing list