[R] How to get NA's into the output of xtabs?

jim holtman jholtman at gmail.com
Mon Oct 5 13:58:34 CEST 2009


Try the reshape package:

> my.df
                   Show  Size       Date
1             Babylon 5 0.000 2007-08-03
2                Dr Who 0.701 2007-08-03
3                Dr Who 0.850 2007-08-04
4                Dr Who 0.850 2007-08-05
5             Star Trek 0.700 2007-08-03
6             Star Trek 0.800 2007-08-04
7             Torchwood 0.800 2007-08-04
8             Torchwood 0.900 2007-08-05
9 Sarah Jane Adventures 0.200 2007-08-05
> require(reshape)
Loading required package: reshape
Loading required package: plyr
> str(my.df)
'data.frame':   9 obs. of  3 variables:
 $ Show: Factor w/ 5 levels "Babylon 5","Dr Who",..: 1 2 2 2 3 3 4 4 5
 $ Size: num  0 0.701 0.85 0.85 0.7 0.8 0.8 0.9 0.2
 $ Date:Class 'Date'  num [1:9] 13728 13728 13729 13730 13728 ...
> x <- melt(my.df, id=c("Show", "Date"))
> cast(x, Show ~ Date)
                   Show 2007-08-03 2007-08-04 2007-08-05
1             Babylon 5      0.000         NA         NA
2                Dr Who      0.701       0.85       0.85
3             Star Trek      0.700       0.80         NA
4             Torchwood         NA       0.80       0.90
5 Sarah Jane Adventures         NA         NA       0.20
>


On Mon, Oct 5, 2009 at 7:03 AM, Tony Breyal <tony.breyal at googlemail.com> wrote:
> Dear all,
>
> Lets say I have the following data frame:
>
>> df1 <- data.frame(Show=c('Star Trek', 'Babylon 5', 'Dr Who'), Size=c(0.7, 0.0, 0.701),  Date=as.Date(c('2007-08-03', '2007-08-03', '2007-08-03'), format='%Y-%m-%d'))
>> df2 <- data.frame(Show=c('Star Trek', 'Dr Who', 'Torchwood'), Size=c(0.8, 0.85, 0.8), Date=as.Date(c('2007-08-04', '2007-08-04', '2007-08-04'), format='%Y-%m-%d'))
>> df3 <- data.frame(Show=c('Sarah Jane Adventures', 'Torchwood', 'Dr Who'), Size=c(0.2, 0.9, 0.85), Date=as.Date(c('2007-08-05', '2007-08-05', '2007-08-05'), format='%Y-%m-%d'))
>> df.list <- list(df1, df2, df3)
>> my.df <- Reduce(function(x, y) merge(x, y, all=TRUE), df.list, accumulate=F)
>> my.df
>                   Show  Size       Date
> 1             Babylon 5 0.000 2007-08-03
> 2                Dr Who 0.701 2007-08-03
> 3                Dr Who 0.850 2007-08-04
> 4                Dr Who 0.850 2007-08-05
> 5             Star Trek 0.700 2007-08-03
> 6             Star Trek 0.800 2007-08-04
> 7             Torchwood 0.800 2007-08-04
> 8             Torchwood 0.900 2007-08-05
> 9 Sarah Jane Adventures 0.200 2007-08-05
>>
>
> I would like to come up with something like this:
>
>
> Show                          2007-08-03 2007-08-04 2007-08-05
> Babylon 5                    0.000         NA            NA
> Dr Who                       0.701         0.850         0.850
> Star Trek                     0.700         0.800         NA
> Torchwood                   NA            0.800         0.900
> Sarah Jane Adventures NA            NA             0.200
>
> The best i can do so far is:
>
>> xtabs(as.numeric(Size) ~ Show + Date, data = my.df)
>                       Date
> Show                    2007-08-03 2007-08-04 2007-08-05
>  Babylon 5                  0.000      0.000      0.000
>  Dr Who                     0.701      0.850      0.850
>  Star Trek                  0.700      0.800      0.000
>  Torchwood                  0.000      0.800      0.900
>  Sarah Jane Adventures      0.000      0.000      0.200
>
> Many thanks in advance,
> Tony
>
>
> # Win Vista Ultimate
>> sessionInfo()
> R version 2.9.2 (2009-08-24)
> i386-pc-mingw32
>
> locale:
> LC_COLLATE=English_United Kingdom.1252;LC_CTYPE=English_United Kingdom.
> 1252;LC_MONETARY=English_United Kingdom.
> 1252;LC_NUMERIC=C;LC_TIME=English_United Kingdom.1252
>
> attached base packages:
> [1] stats     graphics  grDevices utils     datasets  methods
> base
>>
>
> ______________________________________________
> 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.
>



-- 
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem that you are trying to solve?




More information about the R-help mailing list