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@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.