Suppose I have a data frame like "dat" below. For some context, this is the format that represents student's taking a computer adaptive test. first.item is the first item that student was administered and then score.1 is the student's response to that item and so forth.

item.pool <- paste("item", 1:10, sep = "")
set.seed(54321)
dat <- data.frame(id = c(1,2,3,4,5), first.item = sample(item.pool, 5, replace=TRUE),
                second.item = sample(item.pool, 5,replace=TRUE), third.item = sample(item.pool, 5,replace=TRUE),
                score1 = sample(c(0,1), 5,replace=TRUE), score2 = sample(c(0,1), 5,replace=TRUE), score3 = sample(c(0,1), 5,replace=TRUE))

I need to restructure this into a new format. The new matrix df (after the loop) is exactly what I want in the end. But, I'm annoyed at myself for not thinking of a more efficient way to restructure this without using a loop.

df <- matrix(NA, ncol = length(item.pool), nrow = nrow(dat))
colnames(df) <- unique(item.pool)

for(i in 1:5){
                for(j in 2:4){
                                rr <- which(dat[i,j] == colnames(df))
                                df[i,rr] <- dat[i, (j+3)]
                }
}

Any thoughts?

Harold

	[[alternative HTML version deleted]]

