This does not answer your question but here is a shorter version of your code:
xx <- xtabs(Count ~ Outcome + Product, x) yy <- sum(xx) * xx / outer(rowSums(xx), colSums(xx)) subset(as.data.frame(yy), Freq != 0) On Nov 5, 2007 3:18 AM, francogrex <[EMAIL PROTECTED]> wrote: > > Hi, my question is technical but maybe a little complicated to express it > well. I have written this small code to calculate a relative risk (RR) of a > Product-Outcome pairs that I am given: > example dataset called test.txt in tab-delimited format: > ------------------------------------------------- > Product Outcome Count > P.A O.A 1 > P.A O.D 16 > P.B O.A 7 > P.B O.C 23 > P.C O.B 6 > P.C O.B 25 > P.D O.A 3 > P.D O.O 1 > P.E O.O 31 > P.F O.D 2 > P.G O.C 1 > P.G O.D 1 > > ## The code: > x=read.table(file="test.txt",header=TRUE) > yy=reshape(x,direction="wide",idvar="Product",timevar="Outcome") > dat <- sapply(yy, function(x) {x[is.na(x)] <- 0; x}) > dat=subset(dat,select=-Product) > ni=apply(dat,1,sum) > nj=as.vector(apply(dat,2,sum)) > nij=as.vector(x$Count) > ntot=sum(nij) > pi=ni/ntot > pj=nj/ntot > pij=nij/ntot > mat=cbind(Product=as.vector(x$Product),Outcome=as.vector(x$Outcome)) > mat=as.data.frame(mat);mat$pij=pij > zaz=reshape(mat,direction="wide",idvar="Outcome",timevar="Product") > smat<- as.data.frame(sapply(zaz, function(x) > {x[is.na(x)] <- 0; x}) ); > smat=subset(smat,select=-Outcome) > smat$pj=pj; smat[length(nj)+1,1:length(ni)]=pi; > result <- matrix(NA,nrow=length(nj),ncol=length(ni)) > for(i in 1:length(ni)){ > for(j in 1:length(nj)){ > result[j,i]=smat[j,i]/(smat[length(nj)+1,i]*smat[j,length(ni)+1])} > } > colnames(result)<-as.vector(unique(x$Product)) > rownames(result)<-as.vector(unique(x$Outcome)) > result1=ftable(result) > result1=as.data.frame(result1);result1=subset(result1,Freq>0) > names(result1)=c("Outcome","Product", "RR") > result1 > > ##OUTPUT: > Outcome Product RR > 1 O.A P.A 0.6256684 > 2 O.D P.A 5.7956656 > 6 O.A P.B 2.4818182 > 8 O.C P.B 3.7375000 > 14 O.B P.C 19.5000000 > 16 O.A P.D 7.9772727 > 20 O.O P.D 0.9140625 > 25 O.O P.E 3.6562500 > 27 O.D P.F 6.1578947 > 32 O.D P.G 3.0789474 > 33 O.C P.G 2.4375000 > ------------------------------------------- > > My question now is: Suppose I have only some values of Count and RR: > [example like 2 vectors generated randomly:Count=c(1, 16, 7, 23, 6, 25, 3, > 1, 31, 2, 1, 1) and RR=c(0.625668449197861, 5.79566563467492, > 2.48181818181818, 3.7375, 19.5, 7.97727272727273, 0.9140625, 3.65625, > 6.1578947368421, 3.07894736842105, 2.4375)] > Is there a way to reconstitute the count table as the one called test.txt in > the beginning. I mean to reconstitute Product-Outcome-Count table from just > the two vectors of Count and RR? > Thanks. > -- > View this message in context: > http://www.nabble.com/How-to-reconstitute-a-Product-Outcome-table--tf4750151.html#a13582738 > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > R-help@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. > ______________________________________________ R-help@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.