Juliet Hannah
2010-Jul-15 15:55 UTC
[R] replace negative numbers by smallest positive value in matrix
Hi Group, I have a matrix, and I would like to replace numbers less than 0 by the smallest minimum number. Below is an small matrix, and the loop I used. I would like to get suggestions on the "R way" to do this. Thanks, Juliet # example data set mymat <- structure(c(-0.503183609420937, 0.179063475173256, 0.130473004669938, -1.80825226960127, -0.794910626384209, 1.03857280868547, 0.362120146065799, -2.01124119488992, -1.49083525457822, -0.356354715035589, -0.306686279071398, 0.0789120002882668, 1.50314029609087, -0.0177677865019544, 1.31642572649823, 1.78842032090131, -0.991393884836917, -0.868946528068323, -0.325472385456867, 0.119383948888965), .Dim = c(5L, 4L)) # replacement of negative numbers for (mycol in 1:ncol(mymat)) { sort_dat <- sort(mymat[,mycol]) min_pos_index <- min(which(sort_dat >0 )) min_pos_val <- sort_dat[min_pos_index] neg_nums <- which(mymat[,mycol] <= 0) mymat[neg_nums,mycol] <- min_pos_val }
Jun Shen
2010-Jul-15 16:07 UTC
[R] replace negative numbers by smallest positive value in matrix
Hi, Juliet, Something like this? mymat[mymat<0]<-min(mymat[mymat>0]) Jun On Thu, Jul 15, 2010 at 10:55 AM, Juliet Hannah <juliet.hannah at gmail.com> wrote:> Hi Group, > > I have a matrix, and I would like to replace numbers less than 0 by > the smallest minimum number. Below is an > small matrix, and the loop I used. I would like to get suggestions on > the "R way" to do this. > > Thanks, > > Juliet > > # example data set > > mymat <- structure(c(-0.503183609420937, 0.179063475173256, 0.130473004669938, > -1.80825226960127, -0.794910626384209, 1.03857280868547, 0.362120146065799, > -2.01124119488992, -1.49083525457822, -0.356354715035589, -0.306686279071398, > 0.0789120002882668, 1.50314029609087, -0.0177677865019544, 1.31642572649823, > 1.78842032090131, -0.991393884836917, -0.868946528068323, -0.325472385456867, > 0.119383948888965), .Dim = c(5L, 4L)) > > > # replacement of negative numbers > > for (mycol in 1:ncol(mymat)) { > ? sort_dat <- sort(mymat[,mycol]) > ? min_pos_index <- min(which(sort_dat >0 )) > ? min_pos_val <- sort_dat[min_pos_index] > ? neg_nums <- which(mymat[,mycol] ?<= 0) > ? mymat[neg_nums,mycol] <- min_pos_val > } > > ______________________________________________ > 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. >
Phil Spector
2010-Jul-15 16:16 UTC
[R] replace negative numbers by smallest positive value in matrix
Juliet - Since you're operating on each column, apply() would be the appropriate function; mymat = apply(mymat,2,function(x){x[x<0] = min(x[x>0]);x}) - Phil Spector Statistical Computing Facility Department of Statistics UC Berkeley spector at stat.berkeley.edu On Thu, 15 Jul 2010, Juliet Hannah wrote:> Hi Group, > > I have a matrix, and I would like to replace numbers less than 0 by > the smallest minimum number. Below is an > small matrix, and the loop I used. I would like to get suggestions on > the "R way" to do this. > > Thanks, > > Juliet > > # example data set > > mymat <- structure(c(-0.503183609420937, 0.179063475173256, 0.130473004669938, > -1.80825226960127, -0.794910626384209, 1.03857280868547, 0.362120146065799, > -2.01124119488992, -1.49083525457822, -0.356354715035589, -0.306686279071398, > 0.0789120002882668, 1.50314029609087, -0.0177677865019544, 1.31642572649823, > 1.78842032090131, -0.991393884836917, -0.868946528068323, -0.325472385456867, > 0.119383948888965), .Dim = c(5L, 4L)) > > > # replacement of negative numbers > > for (mycol in 1:ncol(mymat)) { > sort_dat <- sort(mymat[,mycol]) > min_pos_index <- min(which(sort_dat >0 )) > min_pos_val <- sort_dat[min_pos_index] > neg_nums <- which(mymat[,mycol] <= 0) > mymat[neg_nums,mycol] <- min_pos_val > } > > ______________________________________________ > 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. >