Hi, May be this helps: dat1 <- read.table(text=" a a b b c c x y x y x y 12 34 256 25 5 32 5 45 23 452 21 45",sep="",header=TRUE,stringsAsFactors=FALSE,check.names=FALSE)
mat1 <- matrix(0,5,5,dimnames=list(NULL,c("x",letters[1:4]))) mat1[,1]<- sort(unique(as.numeric(unlist(dat1[-1,which(dat1=="x",arr.ind=TRUE)[,2]])))) dat1New <- dat1[-1,which(dat1=="x",arr.ind=TRUE)[,2]] dat2New <- dat1[-1,which(dat1=="y",arr.ind=TRUE)[,2]] mat1[,2:4] <-sapply(seq_len(ncol(dat1New)),function(i) {x1 <-dat2New[match(mat1[,1],dat1New[,i]),i] x1[is.na(x1)] <-0 as.numeric(x1)}) mat1 # x a b c d #[1,] 5 45 0 32 0 #[2,] 12 34 0 0 0 #[3,] 21 0 0 45 0 #[4,] 23 0 452 0 0 #[5,] 256 0 25 0 0 A.K. Hello everyone, I have a dataframe made as follows: a a b b c c x y x y x y 12 34 256 25 5 32 5 45 23 452 21 45 ... ... ... ... ... ... My intention is to create just one matrix made as follows x a b c d 5 45 0 32 0 12 34 0 0 0 21 0 0 45 0 23 0 452 0 0 256 ... ... ... ... ... As you can see I want on the first column all the values collected from all the x columns and ordered. On the other columns I want the y-values related to every letter (a-b-c...). For example the first value on the x column is 5 (the smallest). It is present in the a x-values (first matrix) so in the second table I report its related y-value (45). However 5 is not present in the b x-values so I report a 0 on the second table. And so on. I don't know if it's a difficult task but I had several problems with the double header handling and the data. I looked for some clues on the internet but documentation is very fragmented and lacking. (So, in addition, any recommendation for good R books?) ______________________________________________ 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.