On 20-Mar-2014 19:42:35 Kristi Glover wrote:
> Hi R User, 
> I was trying to convert a decimal value into integral (whole number). I used
> round function but some of the cells have the value less than 0.5 and it
> converted into 0. But I wanted these cell to have 1 instead of 0. Another
> way, I could multiply by 10. But l did not want it because it affected my
> results later.
> I was wondering about how I can convert 0.2 to 1. For example 
> data<-structure(list(site1 = structure(1:4, .Label = c("s1", "s2", 
> "s3", "s4"), class = "factor"), A = c(0, 2.3, 2.6, 1.3), B = c(0.5, 
> 0.17, 2.9, 3)), .Names = c("site1", "A", "B"), class = "data.frame",
> row.names = c(NA, 
> -4L))
> output<-structure(list(site1 = structure(1:4, .Label = c("s1", "s2", 
> "s3", "s4"), class = "factor"), A = c(0L, 3L, 3L, 2L), B = c(1L, 
> 1L, 3L, 3L)), .Names = c("site1", "A", "B"), class = "data.frame", row.names
> = c(NA, 
> -4L))
> 
> Thanks for your suggestions in advance.
> cheers,
> KG

Hi Kristi,
the function round() has peculiarites (because of the IEEE standard).
E.g.

  round(1+1/2)
  # [1] 2
  round(0+1/2)
  # [1] 0

i.e. in "equipoised" cases like these, it rounds to the nearest *even"
number; otherwise, if it is nearer to one integer value (above or below)
than to the other (below or above), then it rounds to the nearest integer
value. There are two unambiguous functions you could use for "equipoised"
cases, depending on which way you want to go:

  floor(1+1/2)
  # [1] 1
  floor(0+1/2)
  # [1] 0

  ceiling(1+1/2)
  # [1] 2
  ceiling(0+1/2)
  # [1] 1

The latter would certainly meet your request for "how I can convert
0.2 to 1", since

  ceiling(0.2)
  # [1] 1

But it will not round, say, (1+1/4) to the nearest integer.

On the other hand, if you want a function which rounds to the
nearest integer when not exactly halfway between, and rounds
either always up or always down when the fractional part is exactly 1/2,
then I think (but others will probably correct me) that you may have
to write your own -- say roundup() or rounddown():

  roundup <- function(x){
    if((x-floor(x))==1/2){
      ceiling(x)
    } else {round(x)}
  }

  rounddown <- function(x){
    if((x-floor(x))==1/2){
      floor(x)
    } else {round(x)}
  }

Also have a look at the help page

  ?round

Hoping this helps,
Ted.

-------------------------------------------------
E-Mail: (Ted Harding) <ted.hard...@wlandres.net>
Date: 20-Mar-2014  Time: 20:04:20
This message was sent by XFMail

______________________________________________
R-help@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.

Reply via email to