This is a nice exercise, thank you.
Rich
I have two methods.
dd <- data.frame(a=1:10, b=11:20, cc=21:30, d=letters[1:10])
v <- c(1,2,3,3,2,1,1,2,3,3)
cbind(1:10, v)
dd[cbind(1:10, v)] ## works
dd[cbind(1:10, v)] <- 0 ## doesn't work
## method 1, subset out numeric columns, use matrix subscripts, and
## then reassign them
dd <- data.frame(a=1:10, b=11:20, cc=21:30, d=letters[1:10])
rr <- 1:3 ## range of columns
ddm.sub <- data.matrix(dd[,rr])
ddm.sub[cbind(1:10, v)] <- 0
ddm.sub
dd[,rr] <- ddm.sub
dd
## method 2, use logical subscripts
dd <- data.frame(a=1:10, b=11:20, cc=21:30, d=letters[1:10])
tmp <- matrix(FALSE, nrow(dd), ncol(dd), dimnames=dimnames(dd))
tmp
tmp[cbind(1:10, v)] <- TRUE
tmp
dd[tmp] <- 0
dd
|