[R] Combine multiple tables into one
David Winsemius
dwinsemius at comcast.net
Thu May 2 02:41:55 CEST 2013
add2blocks <- function(m1, m2) { res <- cbind(m1, matrix(0, dim(m2)[1], dim(m2)[2]) )
res <- rbind(res, cbind( matrix(0, dim(m1)[1], dim(m1)[2]), m2) ) }
new <- add2block(table1, table2)
new
#---------------
[,1] [,2] [,3] [,4]
row1 1 1 0 0
row2 1 2 0 0
row3 0 0 0 1
row4 0 0 0 4
On May 1, 2013, at 12:37 PM, arun wrote:
>
>
> Hi,
> May be this helps:
> dat1<- as.data.frame(table1)
> dat2<- as.data.frame(table2)
> names(dat2)<-c("V3","V4")
> library(plyr)
> res<-join(dat1,dat2,type="full")
> res[is.na(res)]<- 0
> res
> # V1 V2 V3 V4
> #1 1 1 0 0
> #2 1 2 0 0
> #3 0 0 0 1
> #4 0 0 0 4
> combinedtable<-as.matrix(res)
> colnames(combinedtable)<- NULL
> combinedtable
> # [,1] [,2] [,3] [,4]
> #[1,] 1 1 0 0
> #[2,] 1 2 0 0
> #[3,] 0 0 0 1
> #[4,] 0 0 0 4
> A.K.
>
>
>
>> Hi,
>>
> >I am trying to combine multiple tables into one, where the
> elements that are created as a result of the merge to be filled with
> zeroes.
>>
>> In other words, to go from this:
>>
>> #Create tables to combine
>> row1 <- c(1,1)
>> row2 <- c(1,2)
>> row3 <- c(0,1)
>> row4 <- c(0,4)
>> table1 <- rbind(row1,row2)
>> table2 <- rbind(row3, row4)
>> table1
> > [,1] [,2]
>> row1 1 1
>> row2 1 2
>> table2
> > [,1] [,2]
>> row3 0 1
>> row4 0 4
>>
>> To this:
>>
>> #What the combined table should look like if things worked out
>> newrow1 <- c(1,1,0,0)
>> newrow2 <- c(1,2,0,0)
>> newrow3 <- c(0,0,0,1)
>> newrow4 <- c(0,0,0,4)
>> combinedtable <- rbind(newrow1, newrow2, newrow3, newrow4)
>> combinedtable
> > [,1] [,2] [,3] [,4]
>> newrow1 1 1 0 0
>> newrow2 1 2 0 0
>> newrow3 0 0 0 1
>> newrow4 0 0 0 4
>>
>> I tried merge() but it
> doesn't make any sense here, and I also tried to melt() the orginal data
> that table1 and table2 are created from to re-created >a "combined"
> table from one step further back from this but couldn't get it to form
> the right table.
>>
>> If that would be an easier solution, here is the starting point
> that table1 and table2 are created from and also the create.table()
> function I wrote to >create them:
>>
>> create.table <- function(a,b){
> > obs <- unique(c(a,b))
> > squ <- matrix(rep(0,length(obs)^2),ncol=length(obs))
> > for(i in 1:length(obs)){
> > for(j in 1:length(obs)){
> > squ[i,j] <- sum((a==obs[i])*(b==obs[j]), na.rm=TRUE)
> > }
> > }
> > squ
>> }
>>
>> #Mock data
>> sampleid <- c(1:5)
>> Q1before <- c(0,0,1,0,1)
>> Q1after <- c(0,1,0,0,1)
>> Q2before <- c(1,0,0,0,0)
>> Q2after <- c(0,0,0,0,0)
>>
>> #This is what my real data looks like
>> #It may be easier to reformat this df to a format that could then
> use my create.table() function to get to the combined table endpoint?
>> mydf <- as.data.frame(cbind(sampleid,Q1before, Q1after, Q2before, Q2after))
>> create.table(mydf$Q1before, mydf$Q1after)
>> create.table(mydf$Q2before, mydf$Q2after)
>>
>> I hope at least some of this makes sense. Thank you for your input, you guys are always the best!
>
> ______________________________________________
> 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
Alameda, CA, USA
More information about the R-help
mailing list