s-news
[Top] [All Lists]

Re: Index a data frame

To: Kenneth Cabrera <krcabrer@epm.net.co>, s-news@lists.biostat.wustl.edu
Subject: Re: Index a data frame
From: "Richard M. Heiberger" <rmh@temple.edu>
Date: Wed, 18 Jan 2006 08:39:29 -0500
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

<Prev in Thread] Current Thread [Next in Thread>
  • Re: Index a data frame, Richard M. Heiberger <=