# [R] crosstabulation and unlist function

William Dunlap wdunlap at tibco.com
Mon Oct 12 22:48:36 CEST 2009

> -----Original Message-----
> From: r-help-bounces at r-project.org
> [mailto:r-help-bounces at r-project.org] On Behalf Of eugen pircalabelu
> Sent: Monday, October 12, 2009 1:06 PM
> To: David Winsemius
> Cc: R-help
> Subject: Re: [R] crosstabulation and unlist function
>
> Hello,
> First of all, thank you David for your reply, but sadly this
> is not what i wanted (i am sorry for not being more specific
> about my problem!)
>
>  aa<-c(1:5)
>  bb<-c(NA,2,NA,4,5)
>  cc<-c(1,2,NA,4,NA)
>  dd<-c("A","B","B","A","C")

You forget to say how you made 'df', which I assume is
df <- data.frame(aa,bb,cc,dd)
Having a self-contained way to reproduce your problem
makes much easier to solve!

>  table(unlist(df[,1:3]))
>
> > df
>   aa bb cc dd
> 1  1 NA  1  A
> 2  2  2  2  B
> 3  3 NA NA  B
> 4  4  4  4  A
> 5  5  5 NA  C
>
> I do not want to get this:
> > tapply(apply(df[,1:3],1,sum, na.rm=TRUE), df\$dd, sum)
> A  B  C
> 14  6 10
>
> but a crosstabulation between  table(unlist(df[,1:3])) and
> df\$dd, which should look something like this:
>
>     1   2   3   4  5
> A  2   0   0   3  0
> B  0   3   1   0  0
> C  0   0   0   0  2

Try

> with(df, table(rep(dd,3), c(aa,bb,cc)))

1 2 3 4 5
A 2 0 0 3 0
B 0 3 1 0 0
C 0 0 0 0 2
or
> table(rep(df\$dd, 3), unlist(df[,1:3]))

1 2 3 4 5
A 2 0 0 3 0
B 0 3 1 0 0
C 0 0 0 0 2

You need the rep() to show how the 5 elements of dd
should correspond to the 15 elements of aa, bb, and cc.

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com

>
> meaning that when dd is A 1 appears 2 times, 2 doesn't
> appear, 3 doesn't appear, 4 appears 3times, 5 doesn't appear;
> when dd is C only 5 appears 2 times (i am not really
> interested in the NA occurence).
> Hopefully, this time my question was a lot more clear.
> Thank you very much !
>
>
>
>
>
>
>
>
> ----- Original Message ----
> From: David Winsemius <dwinsemius at comcast.net>
> To: David Winsemius <dwinsemius at comcast.net>
> Cc: eugen pircalabelu <eugen_pircalabelu at yahoo.com>; R-help
> <r-help at stat.math.ethz.ch>
> Sent: Mon, October 12, 2009 9:36:39 PM
> Subject: Re: [R] crosstabulation and unlist function
>
>
> On Oct 12, 2009, at 3:25 PM, David Winsemius wrote:
>
> >
> > On Oct 12, 2009, at 2:36 PM, eugen pircalabelu wrote:
> >
> >> Hello R-users,
> >>
> >> My toy example:
> >> aa<-c(1:5)
> >> bb<-c(NA,2,NA,4,5)
> >> cc<-c(1,2,NA,4,NA)
> >> dd<-c("A","B","B","A","C")
> >> df<-data.frame(aa,bb,cc,dd=as.factor(dd))
> >> table(unlist(df[,1:3]))
> >>
> >> Can anyone point me to what function let's me do a
> crosstabulation between   table(unlist(df[,1:3])) and df\$dd?
> >> I want to find out when dd==A (or B, or C) how many times
> do the values 1, 2 ,3,..  appear in df[,1:3]?
> >> Thank you very much!
> >
> > One way would be to collect the row sums of those columns
> first, and then sum by index:
> >
> > tapply(apply(df[,1:3],1,sum, na.rm=TRUE), df\$dd, sum)
> > A  B  C
> > 14  9 10
>
> This method is safer than working on table(unlist(df[, 1:3])
> since it does not "break" when an entire row is empty.
>
> > aa<-c(1,2,NA,4,5)
> > bb<-c(NA,2,NA,4,5)
> > cc<-c(1,2,NA,4,NA)
> > dd<-c("A","B","B","A","C")
> > df<-data.frame(aa,bb,cc,dd=as.factor(dd))
> > table(unlist(df[,1:3]))
>
> 1 2 4 5
> 2 3 3 2     # missing row willno longer be aligned with "dd".
> > tapply(table(unlist(df[,1:3])), df\$dd, sum)
> Error in tapply(table(unlist(df[, 1:3])), df\$dd, sum) :
>   arguments must have same length
>
> > tapply(apply(df[,1:3],1,sum, na.rm=TRUE), df\$dd, sum)
> A  B  C
> 14  6 10
>
>
> >
> > --
> > David Winsemius, MD
> > Heritage Laboratories
> > 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.
>
> David Winsemius, MD
> Heritage Laboratories
> 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.
>

More information about the R-help mailing list