[R] Change negative values in column

Steve Lianoglou mailinglist.honeypot at gmail.com
Tue Nov 3 16:49:59 CET 2009


Hi,

On Nov 3, 2009, at 9:56 AM, Joel Fürstenberg-Hägg wrote:

> Hi all,
>
> I'm trying to write a script that changes all negative values in a  
> data frame column to a small positive value, based on the the  
> minimum value of the column.
>
> However, I get the following error:
>
> Error in if (x[i] < 0) { : argument is of length zero

This is telling you that x[i] is a zero length object, so you're  
indexing is wrong

> As well, I would "minimum" to be the smallest of the non-negative  
> values...
>
> Aa_non_neg=(fieldTrial0809$Aa) # Copy column from data frame to  
> manipulate
>
> nonNegative = function(x)
> {
>   minimum=min(x) # Should only use positive minimum!

You have to tell R to only use positive numbers, min(x[x > 0]) would  
have worked.

I'm not really sure what you're looping over below.

>   for (i in x)
>   {
>
>      if(x[i]<0) # Found a negative value
>      {
>         x[i]=minimum/10 # Change to a new non-negative value
>      }
>   }
> }

This will work over each column of an "orig.df" data.frame (assumes  
all cols are numeric) and generate the new data.frame you're looking  
for:

new.df <- as.data.frame(apply(orig.df, 2, function(col) {
   min.val <- min(col[col > 0])
   col[col < 0] <- min.val
   col
}))

-steve

--
Steve Lianoglou
Graduate Student: Computational Systems Biology
   |  Memorial Sloan-Kettering Cancer Center
   |  Weill Medical College of Cornell University
Contact Info: http://cbio.mskcc.org/~lianos/contact




More information about the R-help mailing list