HI Craig, Assuming that this is similar to what you tried: dat <- read.table(text="member code 1 A 1 C 1 F 2 B 2 E 3 D 3 A 3 B 3 D 4 G 4 A",sep="",header=TRUE,stringsAsFactors=FALSE) ?code.list <- LETTERS[1:5] n.mbr <- 4 ?mbr.list <- 1:4 matrix.mat <- matrix(0,ncol=length(code.list),nrow=length(unique(dat$member)),dimnames=list(NULL,code.list)) ?for(i in 1:n.mbr){ ?mbr.i <- dat[dat$member==mbr.list[i],] ?matrix.mat[i,unique(match(mbr.i$code,code.list))]<- 1 ?} matrix.mat1 <- cbind(member=mbr.list,matrix.mat) matrix.mat1 ##This could be also done by: library(reshape2) res <- dcast(dat,member~code,length,value.var="code") ?res1 <- res[,c(TRUE,names(res)[-1] %in% code.list)] res1[,-1][res1[,-1]>1] <- 1 res1 A.K. I have a medical insurance datafile divided into blocks by member, with multiple lines per member. I am processing these into a one line per member model matrix. Member block sizes vary from 1 to 50+. I am matching attributes in claims data to columns in the model matrix and have been getting by with a for loop, but for large files it takes much too long. Is there vectorized/apply based method to do this more efficiently? thanks in advance, Craig McKinstry input data: member code 1 A 1 C 1 F 2 B 2 E 3 D 3 A 3 B 3 D 4 G 4 A code.list <- c(A,B,C,D,E) for(i in 1:n.mbr){ ? mbr.i <- dat[dat$Rmbr==mbr.list[i],] #EXTRACT BLOCK OF MEMBER CLAIMS ? matrix.mat[i,unique(match(mbr.i$code,code.list))] <- 1 } output model.matrix Member A B C D E 1 1 0 1 0 0 2 0 1 0 0 1 3 1 1 0 1 0 4 1 0 0 0 0