[R] Indexing to Insert values from a dataframe into a matrix

David Winsemius dwinsemius at comcast.net
Wed Jun 29 03:47:42 CEST 2011


On Jun 28, 2011, at 9:18 PM, Daisy Englert Duursma wrote:

> Hello,
>
> I think this is a simple problem but I am not coming up with a simple
> solution. I think it just an indexing problem.
>
> I can easily replace values in a matrix from a dataframe when the
> dataframe has row and column numbers. In the example below I use row
> and column names and  I can not get it to work
>
> #make a matrix where rows and columns are the lat and long for a
> bounding box of Australia and all elements have the value of -9990
>
> bb<-matrix(c(rep(-9999,691*886)),nrow=691
> ,ncol
> =886,dimnames=list(seq(-10,-44.50,by=-0.05),seq(112,156.25,by=0.05)))
>
> #dfr with row names and col names and values to be replaced in the  
> matrix
>
> dfr <- data.frame(cbind(x=seq(120,125,by=0.05), y=-25, var.1=1))
>
> #insert the values from the dfr into the matrix
> bb[dfr$x,dfr$y]<-d$var.1

Indexing with a two column matrix is possible, but those vectors are  
not legitimate indices even if you bundle them into a two column  
matrix. (dfr$y's are all -25, so at least the error report is  
informative).

These will return indices:
sapply(as.character(dfr$y), function(x) which(x== dimnames(bb)[[1]]))
sapply(as.character(dfr$x), function(x) which(x== dimnames(bb)[[2]]))

So try:
 > #insert the values from the dfr into the matrix
 > bb[matrix(c(sapply(as.character(dfr$y), function(x) which(x==  
dimnames(bb)[[1]])),  sapply(as.character(dfr$x), function(x)  
which(x== dimnames(bb)[[2]]))), ncol=2)] <- dfr[["var.1"]]


>
> Thanks for your help,
> Daisy
>
> ______________________________________________
> R-help at 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.

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list